2015-09-18 3 views
1

Я строю приложение, для которого я использую Dependency Injection и так как я использую много зависимостей у меня возникают проблемы с пониманием, где мне нужно разрешить эти зависимости:Должен ли я разрешать все мои зависимости на корневом уровне?

Давайте предположим, что я пишу довольно сложное консольное приложение, и приложение вместе использует 100 интерфейсов, которые все зарегистрированы в контейнере IoC.

Означает ли это, что мне нужно разрешить все эти 100 интерфейсов в конструкторе моего корневого метода (поскольку в противном случае я больше не использую Injection Dependency Injection).

Любые проблемы с этим или как это разрешено в наши дни?

Kr,

ответ

2

Неясно мне, что вы имеете в виду под "рассосется". Если вы имеете в виду, вам нужно создать экземпляр всех ваших объектов в корне композиции, а затем нет. Они создаются при создании зависимости верхнего уровня.

Если вы имеете в виду, вам нужно зарегистрировать все зависимости в корне композиции, то да. Тем не менее, в зависимости от используемой структуры, возможно, можно использовать соглашение по методу конфигурации для этого, без явного указания каждой зависимости.

Если под «корневым методом» подразумевается конструктор любого заданного класса, то да, вам нужно создать экземпляр всех объектов, от которых зависит класс (и любых объектов, на которые эти объекты зависят) при создании класса.

При использовании инъекции зависимостей создание объектов должно быть дешевым. Если у вас дорогие объекты, вы должны отложить создание дорогостоящей части до тех пор, пока вы ее не используете, через какой-то метод Lazy или Factory.

+0

Спасибо, это имеет смысл. Но разве это не делает код реальным загроможденным, создавая 100+ объектов в корне? – Complexity

+0

@Complexity - Это зависит. Снова прочитайте мой второй абзац. Однако, даже если вы создаете каждую ссылку вручную, это только одно место, где оно загромождено, и вы всегда можете реорганизовать это в под-методы для организации. –

+0

Знаете ли вы какие-либо контейнеры, которые используют «Конвенция по конфигурации» и что называется, поэтому я могу немного поискать их. – Complexity

Смежные вопросы