С неделю пытаюсь понять, как же работает 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 сервисов в классе, все их регистрировать руками в конструкторе?