Задать вопрос
@knowledge

Как осуществляется грамотная передача объекта DI в конструктор?

Решил попробовать использовать dependency injection в своем приложении и тут возникла проблема

У меня есть front controller, файл index.php, там я создаю экземпляр контейнера (в частности pimple) и передаю в запускаемое приложение

$di = new Pimple\Container():
$di['config'] = require_once __DIR__.'config.php':

$app = new Application($di):
$app->run():

И все супер, заинжектилось.
Далее у меня есть класс контроллер, со своим неймспейсом. Как мне инжектить в этом случае, создавать объект di снова?

$di = new Pimple\Container():
new PostController($di):

В таком случае файл config будет считан повторно, точнее конструкция require_once не даст его считать, возвратив единицу, а моя цель использовать конфиги как синглтон, что собственно у меня и реализовано, но сейчас нужно сделать через dependency injection
  • Вопрос задан
  • 189 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
artem90
@artem90
TeamLead, Developer
Докину в кучу ответов:

В точке входа приложения создается контейнер.
Дальше первое и единственное место где должно быть обращение к контейнеру это, к примеру:
$controller = $container->get(MyController::class)

Все остальное уже инжектится в нужный контроллер.

Пример, конечно, сильно утрирован, но смысл в том, что про контейнер зависимостей должен знать только 1 участок кода - точка входа.
Все остальное приложение не должно иметь представления о контейнере, и только должны получать зависимости.
Иначе приложение будет зависеть на конкретной реализации DI контейнера и в целом на каком-то контейнере. Контейнер это всего лишь инструмент для управления зависимостями, но не зависимость)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽