2012-04-04 11 views
11

Mi objetivo es agregar data_collector a mis clases para mostrar información útil en la barra de herramientas del desarrollador. Mis servicios:Symfony2 ScopeCrossingInjectionException cuando utiliza prototipo de alcance

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

necesito prototipo alcance para tener diferente para cada instancia nueva llamada. Por cierto, service @ old_sound_rabbit_mq.login_rpc también tiene alcance "prototype". Y, me gustaría adjuntar data_collector, lo que podría hacerse con:

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

Pero entonces me dieron una excepción:

ScopeCrossingInjectionException: Alcance de inyección Cruzar detectado: La definición "Profiler" hace referencia al servicio "my_api.auth.login" que pertenece a otra jerarquía de alcance. Este servicio podría no estar disponible en de manera consistente. En general, es más seguro mover la definición "profiler" al alcance "prototype", o declarar "container" como un ámbito secundario de "prototype". Si puede estar seguro de que el otro ámbito está siempre activo, puede establecer la referencia a strict = false para deshacerse de este error .

Y me confunde, porque no sé qué hacer. Traté de establecer la propiedad "strict = false", pero no pasa nada.

+0

@mactpo has encontrado solución para esto? – senK

Respuesta

6

supongo servicios sincronizados de Symfony pueden ayudarle a: doc

de lo contrario se puede establecer "estricta = false" de esta manera:

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

El "=" al final de la definición de servicio al inyectar un servicio desde un ámbito más estrecho, se convertirá "estricto" en falso

Cuestiones relacionadas