2012-04-04 11 views
11

Il mio obiettivo è aggiungere data_collector alle mie classi per visualizzare alcune informazioni utili sulla barra degli strumenti dello sviluppatore. Il mio servizio:Symfony2 ScopeCrossingInjectionException quando si utilizza l'ambito prototipo

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

ho bisogno prototipo scopo di avere un'istanza diversa per ogni nuova chiamata. A proposito, service @ old_sound_rabbit_mq.login_rpc ha anche un "prototipo" di scope. E, mi piacerebbe attaccare data_collector, che potrebbe essere fatto con:

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

Ma poi ho ricevuto un'eccezione:

ScopeCrossingInjectionException: Ambito Crossing iniezione rilevato: La definizione "profiler" fa riferimento al servizio "my_api.auth.login" che appartiene a un'altra gerarchia di ambito. Questo servizio potrebbe non essere disponibile in modo coerente. In generale, è più sicuro spostare la definizione "profiler" in "prototipo" dell'ambito o dichiarare "contenitore" come un ambito figlio di "prototipo". Se si è certi che l'altro ambito è sempre attivo, è possibile impostare il riferimento su strict = false per eliminare di questo errore.

E mi confonde, perché non so cosa fare. Ho provato a impostare la proprietà "strict = false", ma non succede nulla.

+0

@mactpo hai trovato una soluzione per questo? – senK

risposta

6

immagino servizi sincronizzati di symfony possono aiutare: doc

altrimenti è possibile impostare "rigorosa = false" in questo modo:

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

Il "=" alla fine del servizio alta definizione quando si esegue l'iniezione di un servizio da un ambito più ristretto, diventa "strict" su false

Problemi correlati