1

呼び出されたメソッドに応じて他のサービスを呼び出すことができるサービスがあるとします。

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 番目のオプションは、サービスがサービス コンテナー全体に依存するようになり、コードのテストが困難になるなどの理由から、あまり良くありません。

私の質問は、サービスの依存関係を遅延ロードする方法はありますか?

4

1 に答える 1

4

Lazy Servicesはまさにあなたが探しているものです。

于 2013-09-03T09:42:53.127 に答える