我在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
)本身。
答案 0 :(得分:1)
没有得到答案,所以提供我的解决方案"。我已经实现了一个单独的Builder类来实例化DI容器。
将使用库的代码将依赖于特定容器,这可以通过接口来避免。不幸的DI容器以不同的方式工作,因此这不是一个完整的抽象。
在评论中,我指出了这个在PHP中统一DI容器的有趣举措:https://github.com/container-interop/container-interop