Если вы просто все настроите так
есть одно место, где все классы
всегда иметь цепочку зависимостей к
самые глубокие занятия? (если я / что делает
смысл вообще)
Да, это называется составной корень вашего приложения, и именно здесь вы конфигурируете свой контейнер IoC и разрешаете свой корневой тип.
Неправильно иметь весь ваш код
завален зависимостями от IoC
контейнер выбора, это?
Правильно, лучше не передавать ссылки на ваш контейнер IoC вокруг ваших типов, поскольку это сделает их менее пригодными для повторного использования, и связывать типы с концепцией контейнеров IoC в целом.
Так где же вы "используете" свой
контейнер (для рексолвинга)? И как сделать
Вы получаете это, чтобы решить все, как
как глубоко твой код идет? Это часть
проектировать все правильно
используя интерфейсы через каждый
слой до переднего слоя?
Вы будете использовать свой контейнер в корневом каталоге композиции и в любом месте своего кода, для которого необходимо создавать экземпляры типов (т. Е. Из фабричных типов) через контейнер (обычно для поддержки цепочки зависимостей).
Многие контейнеры IoC могут генерировать эти типы фабрики для вас, поэтому вам нужно только передать, например, IMyFactory
в качестве зависимости или, в случае некоторого контейнера IoC, Func<IMyService>
. Это означает, что вам не нужно создавать фабричные типы, которые зависят от вашего контейнера IoC.
С точки зрения использования интерфейсов, принцип инверсии зависимостей гласит, что вы должны зависеть от абстракций, а не от конкреций, поэтому вам нужно будет учитывать ваш код с учетом этой концепции, если вы хотите внедрить внедрение зависимостей.