2015-02-05 3 views
2

Таким образом, инъекция зависимостей. Я понимаю понятия (я думаю!) И использование контейнеров. То, что я не понимаю, - это лучший способ сделать ваш контейнер DI доступным во всем мире.Правильное использование контейнера для инъекций с зависимостями

Если у вас есть класс DB, вы вставляете контейнер в конструктор? Чтобы вы могли вызвать методы контейнера DI для создания зависимых объектов?

Вы делаете то же самое для своего класса конфигурации, вашего класса почтовой программы, вашего класса журнала и т. Д.? Как вы делаете свой контейнер DI доступным во всем мире?

Помогите оценить!

ответ

1

Мое понимание, что вы не делают его доступным во всем мире. Вы регистрируете все объекты и их зависимости, а затем, когда вы строите объект, контейнер IoC поставляет все его зависимости (и зависимости 2-го, 3-го, n-го уровня).

Так что foo нуждается в баре, бар требует baz и qux, а qux - quux. Foo требует только штрих-код, IoC позаботится о деталях подачи бара с его зависимостями и т. Д.

Если foo необходимо сделать больше баров позже, то это зависит от фабрики баров, которую IoC также может поставлять.

+0

Кроме того, контейнер DI следует использовать/доступны только с помощью рамки или другого аналогичного кода инфраструктуры, а не непосредственно другим кодом. Это означает, что выбранная вами структура должна поддерживать DI и контейнеры. – MikeSW

3

Подобно тому, что сказал CJD, если ваш DIC доступен везде, то это будет больше похоже на Global Registry

В случае класса DB, если ее зависимость передается через тип намекая параметры, определяя их извне, в документации или любым другим приемлемым способом, DIC может вводить эти зависимости.

Полезные ресурсы:

Энтони Ferra/ircmaxell video on Dependency Injection

Fabian Potencier article about whether you need a DIC

Rob Allen video Introducing Dependency Injection

Stephan Hochdorfer video The 7 Deadly Sins of Dependency Injection

Мартин Фаулер:

StackOverflow:

+1

Спасибо, некоторые хорошие ресурсы там – CJD

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