最近、私はニキビを(サイレックスと一緒に)使い始めました。Pimple の使用方法に応じて、Service Locator または Dependency Injection Container のいずれかになります。Service Locator パターンを避けるべき理由を認識しています。それにもかかわらず、私を悩ませているように見えることの 1 つは、依存関係インスタンスが作成される瞬間です。
依存性注入の場合、必要なクラスのインスタンスが作成され、コンストラクターに渡されます。
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 クラスの 2 つのメソッドのうちの 1 つだけを呼び出す場合でも、最初の例では両方の依存インスタンスが作成されます。このコードは非常に単純な例ですが、より多くの依存構造を持つより複雑なクラスの場合、問題が大きくなると予想されます。他のいくつかの Dependency Injection Containers がプロキシ クラスを使用していることに気付きましたが、このライブラリには何も見つかりませんでした。Pimple を使用して依存関係を遅延ロードするより良い方法はありますか?