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