Как сохранить экземпляр контейнера для инъекций зависимостей (PHP)

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

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

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

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

Ответ 1

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

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