[英]PHP Lazy loading with Pimple Dependency Injection Container?
最近,我開始使用Pimple(與Silex一起使用)。 根據使用Pimple的方式,它既可以是服務定位器,也可以是依賴注入容器。 我知道應避免使用服務定位器模式的原因。 然而,似乎困擾我的一件事是創建依賴實例的那一刻。
在進行依賴注入的情況下,將創建所需類的實例並將其傳遞給構造函數:
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延遲加載依賴項?
在大多數情況下,這不是問題。 如果初始化依賴關系成為實際的性能問題,則應該將服務拆分為兩個單獨的服務,或者創建一個代理來在第一次調用時延遲加載依賴關系。
有一個PHP庫提供了自動代理生成功能,稱為ProxyManager 。 在不知道您的要求的情況下,我的第一個猜測是,這可能對您來說太過分了。 在您確定存在可以解決此問題的實際性能瓶頸之前,請不必擔心。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.