2012-04-04 26 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的範圍也是「原型」。 而且,我要附加data_collector,這可能與做:

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

但後來我得到了一個例外:

ScopeCrossingInjectionException:範圍跨越注入檢測: 定義「仿形」引用屬於另一範圍層次結構的服務「my_api.auth.login」 。該服務可能不是一致可用的 。通常,將 定義「分析器」移動到範圍「原型」或將「容器」聲明爲 「原型」的子範圍比較安全。如果您可以確定其他示波器 始終處於活動狀態,則可以將參考設置爲strict = false以排除此錯誤的 。

它讓我困惑,因爲我不知道該怎麼做。我試圖設置屬性「strict = false」,但沒有任何反應。

+0

你有沒有發現@mactpo解決此更換? – senK 2014-06-26 11:50:10

回答

6

我猜的symfony的同步服務,可以幫助你:doc

否則,你可以用這種方式設置爲「嚴格=假」:

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

的「=」,在服務定義結束當從較狹窄的範圍注入服務時,將「嚴格」變爲虛假