поделитесь опытом работы с контейнерами зависимости.

Добрый день.
Разбираюсь в работе контейнера зависимостей php-di.org
и возникло у меня недопонимание.

Есть у меня два класса (они загружаются автоматически через composer)
namespace App\Front\Services;

use App\Front\Services\Service2;

class Service1 {

    public $service2;

    public function __construct(Service2 $service){
        $this->service2 = $service;
    }

    function getResult(){
        return $this->service2->name;
    }
}
и
namespace App\Front\Services;

class Service2 {

    public $name = "i am service two";
}
Сервис один зависит от сервиса два, поэтому он в него внедрен как зависимость.
Пока я разруливаю зависимость сам, создавая экземпляр класс service2 и передавая его в конструктор service1 все работает ожидаемо.
Но вот здесь
php-di.org/doc/getting-started.html
в примере говорится, что php/di как раз и создан чтобы избегать ручного решения зависимостей, мол достаточно теперь просто запросить создание service1 через метод контейнера и он создаст и service1 и service2. При условии что у контейнера включена автозагрузка Autowiring
$builder = new DI\ContainerBuilder();
$builder->useAutowiring(true); // специально создаю через билдер чтобы однозначно включить Autowiring
$container = $builder->build();

$s = $container->get('Service1');
echo $s->getResult();
У меня не работает.
Uncaught DI\NotFoundException: No entry or class found for 'Service1'

Подскажите, что делаю не так? Или я не понимаю саму суть работы контейнера зависимости и создание объекта класса Service1 нужно в контейнер внедрить, а он может только разруливать зависимости? Но тогда пример на странице php-di.org/doc/getting-started.html выглядит вводящим в заблуждение. Там есть так же два класса, один зависит от второго и в итоге написано что если не хочешь руками то просто вызови
Instead, we can let PHP-DI figure out the dependencies:

$userManager = $container->get('UserManager');

Behind the scenes, PHP-DI will create both a Mailer object and a UserManager object.
спасибо.
Александр Мельник
02 июля 2021, 14:01
modx.pro
302
0

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0