Как использовать DI-контейнер в многоразовой библиотеке?

Я создаю многоразовую библиотеку в PHP, которая будет использоваться несколькими внутренними приложениями (некоторые веб-нет, некоторые). Я использую инжекцию зависимости конструктора в основном для своих классов, например, для внедрения классов Repository в классы бизнес-логики:

namespace \Company\Project\BusinessLogic;

class MyComplexBusinessWorkflow
{
private $_repository;

public function __construct(IMyEntityRepository $repository)
{
$this->_repository = $repository
}

...
}

Так с Игральная кость Я хотел бы иметь что-то вроде этого, который вводит по умолчанию для библиотеки IMyEntityRepository реализация:

$my_complex_workflow_instance = $dice->create('MyComplexBusinessWorkflow');

вместо:

$my_complex_workflow_instance = new MyComplexBusinessWorkflow(new MyEntityMySQLRepository(new MysqlConnectionWrapper()));

Я в порядке встраивания конкретной библиотеки контейнеров DI в код библиотеки, но не знаю, как управлять экземпляром контейнера ($dice в коде выше) сам.

2

Решение

Не получил ответ, поэтому предоставьте мое «решение». Я реализовал отдельный класс Builder для создания экземпляра DI-контейнера.

Код, который будет использовать библиотеку, будет зависеть от конкретного контейнера, это может быть устранено интерфейсом. К сожалению, разные DI-контейнеры работают по-разному, так что это не полная абстракция.

В комментариях я указывал на эту интересную инициативу по объединению DI-контейнеров в PHP: https://github.com/container-interop/container-interop

1

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

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

По вопросам рекламы [email protected]