【发布时间】:2015-06-03 15:15:32
【问题描述】:
我正在用 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)本身。
【问题讨论】:
-
不是一个真正的答案,但有点相关:container-interop 提供了一些容器实现的标准。这使您可以使用容器而无需将自己绑定到特定的实现。也许它会给你一些想法。
-
看起来很有趣,也许你知道其他语言的类似倡议?
-
是的,有几个 JSR 涵盖了依赖注入(这里是 Java)。除了我不知道。我们一直在 PHP-FIG 中推动 container-interop,使其成为 PSR,仍在进行中。
标签: php dependency-injection inversion-of-control ioc-container