Как сохранить экземпляр контейнера внедрения зависимостей (PHP) - PullRequest
10 голосов
/ 17 февраля 2012

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

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

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

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

1 Ответ

7 голосов
/ 17 февраля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...