2012-02-16 2 views
10

Я использую концепцию DI в течение некоторого времени, но теперь я начинаю использовать контейнер для инъекций зависимостей (DIC). Хотя для меня это не ясно.Как сохранить экземпляр контейнера для инъекций зависимостей (PHP)

В моей DIC я сохраняю (например) объект Config и объект Request. Я понимаю, что эти объекты в области запроса (тот же самый экземпляр используется каждый раз, когда вы запрашиваете его из этого контейнера) остаются теми же. Но это происходит только тогда, когда я повторно использую один и тот же экземпляр DIC.

Как пропустить DIC вокруг моих классов? Скажите, что я хочу использовать его в своем классе Router, мне нужно передать его в конструкторе класса Router? Но класс Router создается в другом классе, и этот должен также иметь этот объект DIC.

Или я должен создать синглтон этой DIC?

ответ

7

Не ходите по маршруту Синглтон. Он эффективно использует все преимущества, предоставляемые DIC. Обычно вы передаете контейнер в конструкторе или в качестве параметра метода, где это применимо.

Да, это требует от вас дополнительных усилий по передаче объекта контейнера вокруг приложения, но в результате ваш код хорошо отражает, что эти классы зависят от работы этого объекта.

+1

Лучший способ создать DIC в бутстрапе моего приложения и передать его туда, где это необходимо? Похоже на хороший подход, но мне действительно нужно приложить дополнительные усилия. (Мои классы также будут очень проверяемыми) – jayv

+0

Для контейнера, который используется через все приложение, которое может быть довольно хорошей идеей. Он эффективно инкапсулирует ресурсы/объекты, которые в противном случае должны были бы отображаться как глобальные переменные или синглтоны. Помните, что вы также можете иметь локальные контейнеры DI с ограниченным объемом использования. Они должны быть созданы в объеме, в котором они требуются. – Mchl

+0

Можете ли вы дать мне короткий практический пример использования ограниченного объема? – jayv

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