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

时间:2015-03-30 14:35:48

标签: php dependency-injection inversion-of-control ioc-container

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

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)本身。

1 个答案:

答案 0 :(得分:1)

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

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

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