2012-03-26 13 views
14

ho letto questo: http://symfony.com/doc/current/book/service_container.htmlSymfony 2 servizio con più istanze?

Diceva:

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

Come bonus aggiuntivo, il servizio Mailer è creato solo una volta e il stessa istanza viene restituita ogni volta che si chiede per il servizio. Questo è quasi sempre il comportamento che ti servirà (è più flessibile e potente ), ma in seguito impareremo come configurare un servizio che ha più istanze.

come faccio a fare il mio servizio di avere più istanze - vale a dire ogni volta che raggiungo il servizio mi viene data una nuova istanza? Qualcosa come $this->getNew() o qualcosa del genere?

risposta

31

Stai parlando della portata di un servizio. Puoi cercarli here. In breve, definire il servizio come ambito prototipo al posto del contenitore predefinito e il contenitore iniezione di dipendenza si prenderà cura di creare un nuovo oggetto ogni volta che lo si richiede:

services: 
    my_service: 
     class: Someclass 
     scope: prototype 

Nota: dal Symfony2.8, scope: prototype è stato sostituito da shared: false.

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

C'è un modo per forzare la ricreazione a volte non sempre? –

+0

@RezaSanaie Probabilmente dovresti definire un servizio astratto ed estenderlo due volte per avere una versione prototipo e con scope contenitore. Se è necessario mantenere la nuova istanza del prototipo, è possibile sovrascrivere il contenitore con ambito impostando la nuova istanza su di esso. –