Hatsune-Miku
@Hatsune-Miku
Няшк :3

Dependency Injector это магия?

С неделю пытаюсь понять, как же работает dependency injector "изнутри".
Копал php-di и вроде бы понял... php-di автоматически внедряет через конструктор нужный класс и поэтому заменить класс MyService если потом понадобится становится гораздо проще...

Типо так:

<?php
class MyService
{
    public function returnValue ()
    {
        return 'Hello World';
    }
}

class MyController
{
    private $myService;

    public function __construct (MyService $myService)
    {
        $this->myService = $myService;
    }

    public function action ()
    {
        echo $this->myService->getValue();
    }
}

$di = new DI\ContainerBuilder::buildDevContainer();

$myController = $di->get('MyController');
$myController->action(); // Выводит Hello World


Для меня код выше не более чем магия, как оно узнало, что нужно передать именно MyService?
И ещё не понятно, а что делать если нужно например 10 сервисов в классе, все их регистрировать руками в конструкторе?
  • Вопрос задан
  • 581 просмотр
Решения вопроса 1
toxicmt
@toxicmt
CTO at hexlet.io
Внедрение зависимостей может происходить не только через конструктор, но и, например, через сеттеры. А многие библиотеки для внедрения зависимостей используют рефлексию для того чтобы узнать "а что собственно требуется". Рефлексия это способность программ узнавать структуру самой себя во время выполнения. В php это php.net/manual/ru/intro.reflection.php.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 10:00
10000 руб./за проект
29 мар. 2024, в 09:59
750 руб./в час
29 мар. 2024, в 09:55
50000 руб./за проект