DI-контейнер должен быть глобальный?

98
23 марта 2021, 18:10

Начал изучать DI-контейнеры, мне очень нравится реализация Pimple (готов также рассмотреть примеры на symfony DI).

Вопрос первый, комплексный:

Должен ли DI контейнер быть глобальным для проекта? Т.е. при разработке приложения, в одном месте я помещаю и туда сервисы и конфигурирую их, а в другим местах приложения (других файлах) получаю эти сервисы?

Как это делается? В рахных файлах (классах) я могу добавлять сервисы в контейнер ? Тогда возможны случаи, когда при попытке получить сервис, его не окажется.. Т.е. вызов сервиса до объявления. Как быть с этим?

Или лучше в одном месте добавлять все сервисы и зависимости? Как это делают другие?

  1. Как должен инициализироваться DI контейнер, чтобы был доступен во всех файлов проекта? Правильно понимаю, что либо глобальная переменная, либо singleton ? Или как?
Answer 1

Добавлять все сервисы и зависимости следует в одном месте. В объектно-ориентированном приложении не должно быть ни глобальных переменных, ни синглтона. Этого сложно избежать, и проще всего скатиться по простой дорожке к синглтону. Но это приведет к проблемам в будущем. Есть два подхода. Это либо явное объявление всех классов с их зависимостями, как это принято в Симфони 3.хх, либо магия - рефлекшен похуже, аннотации получше, но тоже так себе.

То есть, когда мы просим систему создать новый объект, у нас уже есть информация о том, какие объекты ему понадобятся в качестве аргументов, и контейнер подставит инстансы требуемых сервисов.

READ ALSO
Вопрос по работе с массивами и запросом

Вопрос по работе с массивами и запросом

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

115
Генерация картинок в цикле

Генерация картинок в цикле

Есть код — создание штрих кодаКак сделать чтобы генерировались картинки в таблицу?

84
Как убрать значение integer в нативном классе PHP?

Как убрать значение integer в нативном классе PHP?

Есть код по сбору данных по SNMP:

102
Работа с массивами. Механика

Работа с массивами. Механика

Есть очень интересная задачаЗанимаюсь сайтом доставки пиццы, где есть такое понятие как модификатор(допустим добавить колбасу)

110