2012-03-26 18 views
14

leí esto: http://symfony.com/doc/current/book/service_container.htmlServicio Symfony 2 con varias instancias?

Se dijo:

$mailer = $this->get('my_mailer'); 

Como un beneficio adicional, el servicio Mailer sólo se crea una vez y el misma instancia se volvió cada vez que se solicita el servicio. Esto es casi siempre el comportamiento que necesitará (es más flexible y potente), , pero más adelante aprenderemos cómo puede configurar un servicio que tiene varias instancias.

¿Cómo puedo hacer que mi servicio tenga varias instancias, es decir, cada vez que llego al servicio, me dan una nueva instancia? Algo como $this->getNew() o algo?

Respuesta

31

Estamos hablando del alcance de un servicio. Puede buscarlos here. En resumen, definir su servicio como prototipo alcance en lugar del contenedor predeterminado y el contenedor de inyección de dependencias se encargará de crear un nuevo objeto cada vez que lo solicite:

services: 
    my_service: 
     class: Someclass 
     scope: prototype 

Nota: desde Symfony2.8, scope: prototype ha sido reemplazado por shared: false.

# Symfony >= 2.8 
services: 
    my_service: 
     class: Someclass 
     shared: false 
+4

¿Hay alguna manera de forzar solo la recreación a veces no siempre? –

+0

@RezaSanaie Probablemente necesite definir un servicio abstracto y extenderlo dos veces para tener un prototipo y una versión con ámbito de contenedor. Si necesita persistir en la nueva instancia del prototipo, puede anular el ámbito del contenedor estableciendo la nueva instancia en él. –