2011-02-25 13 views
7

मैं सेटटर इंजेक्शन पर कन्स्ट्रक्टर इंजेक्शन का उपयोग करने के लाभों को समझता हूं लेकिन कुछ मामलों में मुझे केवल सेटटर-आधारित इंजेक्शन के साथ चिपकना पड़ता है। मेरा सवाल यह है कि injector.injectMembers() विधि का उपयोग कर सभी सेटर-आधारित इंजेक्शन कक्षाओं के सदस्यों को इंजेक्ट कैसे करें?Guice injectMembers विधि

//I am calling this method in init method of my application 
private static final Injector injector = Guice.createInjector(new A(), new B()); 

//Injecting dependencies using setters of all classes bound in modules A and B 
injector.injectAllMembers()?? 
+1

क्या आप प्रमाणन उपयोग केस का कोड उदाहरण दे सकते हैं? –

+0

गुइस पहले से ही करता है। क्या आपको वास्तव में कोई समस्या है? – jabbie

उत्तर

10

आपको निर्भरताओं को मैन्युअल रूप से इंजेक्ट करने की आवश्यकता क्यों है?

गुइस फ़ील्ड और विधियों में निर्भरता को इंजेक्ट करता है। उपयोग:

YourClass yourClass = injector.getInstance(YourClass.class); 

Guice प्रलेखन:

जब भी Guice एक उदाहरण बनाता है, जिसे प्रदर्शन इस इंजेक्शन स्वचालित रूप से , इसलिए यदि आप यह बताने के लिए कर रहे हैं (पहले निर्माता इंजेक्शन प्रदर्शन के बाद) Guice आपके लिए अपनी सभी ऑब्जेक्ट्स बनाएं, आपको इस विधि का उपयोग करने की आवश्यकता नहीं होगी।

YourClass yourClass = new YourClass(); 
injector.injectMembers(yourClass); 

या आप ऐसा ही कुछ का उपयोग कर सकते हैं::

public class YourClassProvider implements Provider<YourClass> { 

    private final Injector injector; 

    @Inject 
    public YourClassProvider(Injector injector) { 
     this.injector = injector; 
    } 

    public YourClass get() { 

     YourClass yourClass = new YourClass(); 
     injector.injectMembers(yourClass); 

     return yourClass; 
    } 
} 

किसी भी मामले में, के setters

आप केवल इस तरह की एक मैन्युअल रूप से बनाए गए उदाहरण में खुद के द्वारा सदस्यों इंजेक्षन करने की जरूरत है YourClass @Inject के साथ एनोटेट किया जाना चाहिए।

+0

कोज़ गुइस उन वर्गों के उदाहरण नहीं बना रहा है, मैं उन वर्गों के उदाहरण कहीं और प्राप्त करने के लिए गुइस प्रदाता का उपयोग कर रहा हूं। – Abidi

+0

अद्यतन उत्तर में कोड देखें। उम्मीद है कि यह मदद करेगा। – Pavel

+1

जब आप संपूर्ण 'इंजेक्टर' के बजाय ऐसा करना चाहते हैं तो 'सदस्य इंजेक्टर ' इंजेक्ट करने की अनुशंसा की जाती है। – ColinD

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