呼び出されたメソッドに応じて他のサービスを呼び出すことができるサービスがあるとします。
class Foobar
{
public function foo() {
return *SERVICE_A*->baz();
}
public function bar() {
return *SERVICE_B*->qux();
}
}
ここで、Foobar の foo() メソッドを呼び出すときに、SERVICE_A を Foobar で使用できるようにする必要があります。SERVICE_A と SERVICE_B を Foobar の依存関係として定義し、構築段階でそれらの作成をサービス コンテナーに委任するか、Foobar の setServiceA() メソッドや setServiceB() メソッドなどのセッターを使用して外部から注入するか、サービス コンテナーを現時点で本当に必要なサービスだけを構築できるようにするFoobar。
最初のオプションは、どちらかが呼び出されなくても SERVICE_A と SERVICE_B の両方が作成されるため、私には適切ではないようです。2 番目のオプションは、サービス インフラストラクチャを外部に公開するため、明らかに間違っています。3 番目のオプションは、サービスがサービス コンテナー全体に依存するようになり、コードのテストが困難になるなどの理由から、あまり良くありません。
私の質問は、サービスの依存関係を遅延ロードする方法はありますか?