2012-04-04 13 views
11

私の目的は、開発者ツールバーに役立つ情報を表示するためにdata_collectorをクラスに追加することです。 マイサービス:Symfony2 ScopeCrossingInjectionExceptionプロトタイプスコープを使用する場合

services: 
    my_api.auth.login: 
     class: YO\ApiV1\Services\Auth\Login 
     arguments: 
      - requestId 
      - "@old_sound_rabbit_mq.login_rpc" 
      - "@service_container" 
     scope: prototype 

私はすべての新しいコールのための別のインスタンスを持つようにスコープのプロトタイプを必要とします。ちなみに、service @ old_sound_rabbit_mq.login_rpcにはスコープ「prototype」もあります。

tags: 
    - { name: data_collector, template: "AcmeDebug:Collector:templatename", id: "your_collector_name" } 

しかし、その後、私は例外だ:

ScopeCrossingInjectionException:範囲クロッシングインジェクションが検出されました: 定義「プロファイラ」を そして、私は行うことができるdata_collectorを、添付したいのですが別のスコープ階層に属するサービス「my_api.auth.login」 を参照します。このサービスは、一貫して利用可能な ではない可能性があります。一般に、 の定義「プロファイラ」をスコープ「プロトタイプ」に移動するか、「コンテナ」を という子スコープの「プロトタイプ」として宣言する方が安全です。他のスコープ が常にアクティブであることを確認できる場合は、strict = falseへの参照を設定して、このエラーを取り除く とすることができます。

私は何をすべきかわからないので、混乱します。プロパティを "strict = false"に設定しようとしましたが、何も起こりません。

+0

に置き換えられましたか? – senK

答えて

6

私はあなたを助けることがsymfonyの同期サービスを推測:doc

そうでなければ、このように「=厳格な偽」を設定することができます。

services: 
    my.service.definition: 
     class: Acme\Services\BlaService 
     arguments: 
      - "@any_other_service_from_narrower_scope=" 
     scope: prototype 

「=」サービス定義の終わりに狭い範囲からサービスを注入する場合、厳密に偽になります

関連する問題