2017-11-13 20 views
2

私はコンストラクタでいくつかの依存性注入で定義されたサービスを持っています。ある時点で、すでに作成された同じインスタンスの代わりに新しいインスタンスとしてサービスを取得したいとします。通常はサービスを共有したいのですが、エッジケースでは新しいインスタンスを作成したいので、サービス定義の共有オプションは使用できません。symfonyは新しいインスタンスとして新しいサービスを作成します

私は新しいオブジェクトを作成できますが、私は依存関係を手動で注入する必要があり、symfonyに対処させたいと思います。

symfonyにサービスを新しいインスタンスとして返すように指示するにはどうすればよいですか?

ありがとうございます。

答えて

4

私が知る限り、Symfony依存性注入コンテナに共有インスタンスを何回か返すように指示する方法はなく、他の回はサービスの新しいインスタンスを返す方法はありません。

デフォルトでは、すでに見つかったサービスは共有されています。あなたは、あなたのサービス定義にfalseshared設定を設定することにより、create a not-shared serviceにコンテナを伝えることができます:

# app/config/services.yml 
services: 
    AppBundle\SomeNonSharedService: 
     shared: false 

をこの知識を武器に、私はあなたの問題の解決が異なると共有サービスの複製を作成することだと思います上で説明したように非共有としてマークしてください。コンテナに重複を取得するよう要求すると、毎回新しいインスタンスが作成されます。

元のサービスのエイリアスとして複製を作成しようとしないでください。動作しません。 Contaner::get()の実装が最初に行うことは、エイリアスのリストに引数として提供されたサービスIDを検索し、見つかった場合は元のサービスのIDを代わりに使用することです。

+1

私はついにこのサービスでリセット操作を行いましたが、あなたのソリューションはより良く適合していると思います。ありがとうございました! –

関連する問題