@thorii

Может ли вот так работать DI контейнер?

$sys = new Container();
Далее класс считывает конфиг, где прописано как создавать объект, его аргументы конструктора и т.д.
При первом обращении к сервису вида
$sys->get(Request::class);
//или по псевдониму как $sys->request

Контейнер создаст объект следуя правилам в конфиге.

Динамически можно регистрировать сервисы через замыкания
$sys->notInitService = function(Container $c) {
return new NewService($c->get(ServiceArg::class));
}


Может ли оно вообще так работать. В сети тонна информации и статей, которые нивелируются по смыслу и найти внятное объяснение DI весьма трудно
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
NeLexa
@NeLexa
Здравствуйте.
Конечно, может.
Посмотрите на хорошую реализацию DI - php-di.org/.
Ваш пример бы там выглядел бы так:

$container->set(ServiceArg::class, function(){
    return new ServiceArgImpl();
});
$container->set('notInitService', \DI\object(NewService::class));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы