2012-07-25 14 views
9

Nella definizione dei miei servizi, vorrei passare come costruttore di argomento di servizio un oggetto non un servizio.Symfony: Inject object (not service) al servizio di costruzione

Da config.yml:

services: 
    acme.services.exampleservice: 
    class: Acme\ExampleBundle\Services\ExampleService 
    arguments: 
     entityManager: "@doctrine.orm.entity_manager" 
     httpClient: \Example\Http\Client\Client 

Nota l'argomento httpClient. Questa deve essere un'istanza della classe \Example\Http\Client\Client.

Quanto sopra non funziona: la stringa "\ Esempio \ Http \ Client \ Client" viene passata come argomento httpClient al servizio.

Qual è la sintassi per il raggiungimento di quanto sopra mediante il passaggio di un'istanza di \Example\Http\Client\Client al costruttore del servizio?

risposta

18

Creare un servizio privato. Ecco cosa c'è scritto in the documentation:

Se si utilizza un servizio privato come un argomento a più di un altro servizio, questo si tradurrà in due diverse istanze di essere usati come l'istanza del servizio privato è fatto in linea (eg PrivateFooBar()).

services: 
    acme.services.exampleservice: 
    class: Acme\ExampleBundle\Services\ExampleService 
    arguments: 
     entityManager: "@doctrine.orm.entity_manager" 
     httpClient: acme.services.httpClient 

    acme.services.httpClient: 
    class: Example\Http\Client\Client 
    public: false 

Non sarà in grado di recuperare un servizio privato dal contenitore. Dall'esterno sembra che tu abbia passato un oggetto normale al costruttore del tuo servizio.

+1

Signore, mi hai salvato il culo! Grazie! –

Problemi correlati