最近我已经开始使用Pimple(与Silex一起)。根据Pimple的使用方式,它可以是服务定位器或依赖注入容器。 我知道应该避免使用服务定位符模式的原因。然而,似乎困扰着我的一件事是创建依赖实例的时刻。PHP延迟加载疙瘩依赖注入容器?
在依赖注入的情况下,创建所需的类的实例,并传递给构造函数:
class Foo{
public $depend1;
public $depend2;
public function __construct($depend1, $depend2) {
$this->depend1=$depend1;
$this->depend2=$depend2;
}
public function task1() {
return $this->depend1->run();
}
public function task2() {
return $this->depend2->run();
}
}
在情况下,我们的容器本身传递给类的构造函数,依赖情况下不需要直到需要时才创建。
class Foo{
public $app;
public function __construct(\Silex\Application $app) {
$this->app=$app;
}
public function task1() {
return $app['depend1']->run();
}
public function task2() {
return $app['depend2']->run();
}
}
其结果是,即使我们只打算呼吁Foo类的两种方法之一,在第一个例子还是既依赖实例将被创建。这段代码是一个非常简单的例子,但我认为如果更复杂的类具有更多的依赖性结构,问题将会增加。我注意到一些其他的依赖注入容器使用代理类,但无法找到这个库的任何东西。有没有更好的替代方案延迟加载Pimple的依赖关系?