Несколько DI-контейнеров в PHP? - PullRequest
4 голосов
/ 20 февраля 2011

Я думаю реорганизовать некоторый код в приложении MVC, построенном на PHP, чтобы использовать контейнеры для внедрения зависимостей.

В настоящее время я смотрю на компонент Symfony DI, который выглядит довольно хорошо. Я понимаю основы DI и DI-контейнеров, но я использую один глобальный контейнер или несколько контейнеров в своем приложении?

Например, допустим, у меня есть: Класс «Пользователь» требует зависимости: «ActiveRecord» и «Sessions» Класс «SiteStatistics» требует зависимостей: «ActiveRecord» и «Sessions»

Должны ли объекты User и SiteStatistic размещаться в разных контейнерах? Или я должен иметь глобальный контейнер, который содержит все, что мне когда-либо нужно создать?

Спасибо:)

1 Ответ

2 голосов
/ 11 мая 2011

Преимуществом DI-контейнеров является то, что вы можете определить свои зависимости, а контейнер предоставляет вам объекты со всеми зависимостями (и их зависимости по очереди и т. Д.). Чем больше объектов вы поместите в контейнер, тем выше вероятность, что вы можете использовать эти объекты вместе, не вызывая «new» в одном из объектов.

Итак - если объект "Sessions" для пользователя и объект "Sessions" для SiteStatistics совпадают, то во всех случаях используйте только один контейнер. Если они разные, все равно используйте один контейнер, но используйте разные идентификаторы для каждого объекта сеанса при настройке зависимостей.

Если вы ищете способы изолировать данные сеанса пользователя от данных SiteStatistics, я думаю, что контейнер DI является неподходящим местом для этого.

...