如何在可重用库中使用 DI 容器?

How to use DI container in reusable library?

我正在 PHP 中构建一个可重复使用的库,它将被多个内部应用程序使用(一些 Web 应用程序不使用)。我主要为 类 使用构造函数依赖注入,例如将我的存储库 类 注入业务逻辑 类:

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 容器库嵌入到我的库代码中,但不确定如何管理容器实例(上面代码中的$dice)本身。

没有得到答案,所以请提供我的 "solution"。我已经实现了一个单独的 Builder class 来实例化 DI 容器。

将使用库的代码将依赖于特定容器,这可以通过接口抽象化。不幸的是,不同的 DI 容器以不同的方式工作,所以这不是一个完整的抽象。

在评论中有人指出我在 PHP 中统一 DI 容器的有趣举措:https://github.com/container-interop/container-interop