如何在可重用库中使用 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
我正在 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