Контейнер внедрения зависимостей – это объект, который предназначен для создания других объектов со всеми необходимыми зависимостями. Под “зависимостями” понимаются другие объекты, которые должны быть созданы перед созданием желаемого объекта. Yii2 создаёт контейнер внедрения зависимостей когда вы подключаете файл Yii.php во входном скрипте вашего приложения, а получить доступ к нему можно через “Yii::$container”.

Для примера возьмем класс “SupportManager” и создадим его через контейнер внедрения зависимостей.

Код этого класса:

Код контроллера из которого будет запрашиваться сгенерированный объект класса “SupportManager”:

Создадим Bootstrap-файл с объявлением зависимостей для класса “SupportManager”. В “средних” проектах обычно создают разные Bootstrap-файлы для объявления Singleton’ов и остальных зависимостей (которые используют эти Singleton’ы), а в “крупных” проектах с большим количество модулей могут быть и десятки подобных файлов, но в нашем случае у нас будет только один:

Подключаем созданный Bootstrap-файл в конфигурации Yii2:

После добавления “ServicesDefinitions” в раздел предварительной загрузки контроллер внедрения зависимостей Yii2 начнет работать. Приведу еще несколько примеров из документации:

Если создаваемый объект очень сложный, то его созданием можно вынести в отдельный “построитель”:

С помощью DIC вы можете настраивать компоненты Yii2, например:

Еще один важны момент, два создания Singleton’ов используется метод “$container->setSingleton()”, а для обычных объектов “$container->set()”.

Полезные ссылки:

Добавить комментарий