2012-07-25 37 views
9

पर ऑब्जेक्ट (सेवा नहीं) इंजेक्ट करें मेरी सेवाओं की परिभाषा में, मैं एक सेवा तर्क निर्माता के रूप में एक ऑब्जेक्ट सेवा नहीं देना चाहता हूं।सिम्फनी: सेवा निर्माता

config.yml से

:

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

नोट httpClient तर्क। यह \Example\Http\Client\Client वर्ग का एक उदाहरण होना चाहिए।

उपर्युक्त काम नहीं करता है - स्ट्रिंग "\ उदाहरण \ Http \ क्लाइंट \ क्लाइंट" सेवा के लिए httpClient तर्क के रूप में पारित किया जाता है।

सेवा निर्माता को \Example\Http\Client\Client का उदाहरण उत्तीर्ण करने के माध्यम से ऊपर प्राप्त करने के लिए वाक्यविन्यास क्या है?

उत्तर

18

एक निजी सेवा बनाएं। यहां बताया गया है the documentation में लिखा है:

आप एक से अधिक अन्य सेवा के लिए एक तर्क के रूप में एक निजी सेवा का उपयोग करते हैं, यह दो अलग-अलग विविधताएं निजी सेवा इनलाइन किया जाता है की इन्स्टेन्शियशन के रूप में इस्तेमाल किया जा रहा में परिणाम होगा (जैसे नई 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 

आप कंटेनर से एक निजी सेवा को पुनः प्राप्त करने में सक्षम नहीं होगा। बाहर से ऐसा लगता है जैसे आपने अपनी सेवा के निर्माता को नियमित वस्तु पारित की है।

+1

महोदय, आपने मेरे गधे को बचाया! धन्यवाद! –

संबंधित मुद्दे