最近我已經開始使用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的依賴關係?