В настоящее время я взвешиваю преимущества и недостатки между DI и SL. Однако я обнаружил себя в следующей уловке 22, которая подразумевает, что я должен просто использовать SL для всего и только вводить контейнер IoC в каждый класс.
DI Catch 22:
Некоторые зависимости, например Log4Net, просто не подходят для DI. Я называю эти мета-зависимости и считаю, что они должны быть непрозрачными для вызывающего кода. Мое оправдание состоит в том, что если простой класс «D» изначально был реализован без ведения журнала, а затем вырастет до необходимости ведения журнала, то зависимые классы «A», «B» и «C» теперь должны каким-то образом получить эту зависимость и передать ее от От «A» до «D» (при условии, что «A» составляет «B», «B» составляет «C» и т. Д.). Теперь мы внесли значительные изменения в код только потому, что нам требуется ведение журнала в одном классе.
Поэтому нам нужен непрозрачный механизм для получения мета-зависимостей. На ум приходят два: Синглтон и SL. Первый имеет известные ограничения, в первую очередь в отношении возможностей жесткого определения области видимости: в лучшем случае синглтон будет использовать абстрактную фабрику, которая хранится в области действия приложения (т. Е. В статической переменной). Это дает некоторую гибкость, но не идеально.
Лучшим решением было бы внедрить контейнер IoC в такие классы, а затем использовать SL внутри этого класса для разрешения этих мета-зависимостей из контейнера.
Следовательно, уловка 22: поскольку класс теперь внедряется с контейнером IoC, почему бы не использовать его также для разрешения всех других зависимостей?
Буду очень признателен за ваши мысли :)