Я создаю многоразовую библиотеку в PHP, которая будет использоваться несколькими внутренними приложениями (некоторые некоторые из них не являются). Я использую инъекции зависимостей конструктора в основном для моих классов, например, инъекционной мои Repository классов в бизнес-логике классов:Как использовать контейнер DI в библиотеке многократного использования?
namespace \Company\Project\BusinessLogic;
class MyComplexBusinessWorkflow
{
private $_repository;
public function __construct(IMyEntityRepository $repository)
{
$this->_repository = $repository
}
...
}
Так с Dice я хотел бы иметь что-то вроде этого, которое впрыснуть по умолчанию для реализации библиотеки IMyEntityRepository
:
$my_complex_workflow_instance = $dice->create('MyComplexBusinessWorkflow');
вместо:
$my_complex_workflow_instance = new MyComplexBusinessWorkflow(new MyEntityMySQLRepository(new MysqlConnectionWrapper()));
Я нормально с вложением частности DI контейнера Весов ry в мой библиотечный код, но не уверен, как управлять экземпляром контейнера ($dice
в коде выше).
Не совсем ответ, но немного родственный: есть [контейнер-Interop] (https://github.com/container -interop/container-interop), который обеспечивает стандарт, который реализуют некоторые контейнеры. Это позволяет использовать контейнер, не привязывая себя к конкретной реализации. Может быть, это даст вам некоторые идеи. –
Выглядит очень интересно, может быть, вы знаете об аналогичной инициативе на других языках? – artvolk
Да, есть пара JSR, которые охватывают инъекцию зависимостей (так Java здесь). Кроме того, что я не знаю. Мы нажимаем контейнер-interop на PHP-FIG, чтобы он стал PSR, все еще работающий. –