Кросс-зависимости PHP IoC

Таким образом, у нас есть контейнер, поставщики услуг и, с инверсией управления, мы можем делать такие вещи, как:

public function __construct(CarServiceInterface $carService)
{
}

И все решается красиво, потому что где-то еще …

$container->bind(CarServiceInterface::class, function ()
{
return new CarService();
});

Допустим, автосервис зависит от человеческого сервиса. Затем…

    $container->bind(CarServiceInterface::class, function (Container $container)
{
return new CarService($container->make(HumanServiceInterface::class);
});

Эй, это работает. Здорово.

Но вдруг людям НУЖНЫ автомобили, и человеческая служба построена так:

$container->bind(HumanServiceInterface::class, function (Container $container)
{
return new HumanService($container->make(CarServiceInterface::class);
});

Вуаля, взаимозависимость.

Как это решить?

Является ли это следствием недостатка в дизайне?

Спасибо!

2

Решение

Я думаю, что это будет называться «Круговые зависимости» (см. Вот подробнее об этом).

В ответе говорится, что сделать это невозможно, и что единственный способ использовать циклическую зависимость — это использовать установку с помощью сеттера вместо обычной инъекции с помощью конструктора.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector