मैं, मार्सिन की प्रतिक्रिया पूरक जोड़ने आप toInstance()
का उपयोग कर अपने आप को सीमित करने के लिए की जरूरत नहीं है कि द्वारा करना चाहते हैं या ऐसी स्थिति में प्रदाता विधियों।
निम्नलिखित बस के रूप में अच्छी तरह से काम करेगा:
bind(Person.class).annotatedWith(Driver.class).to(MartyMcFly.class).in(Singleton.class);
bind(Person.class).annotatedWith(Inventor.class).to(DocBrown.class).in(Singleton.class);
[...]
@Inject
public BackToTheFuture(@Driver Person marty, @Inventor Person doc) { ... }
Guice जब MartyMcFly और DocBrown कक्षाएं instantiating हमेशा की तरह निर्भरता इंजेक्षन जाएगा।
नोट यह भी काम करता है कि जब आप एक ही प्रकार के कई एकमात्र बाध्य करने के लिए चाहते हैं:
bind(Person.class).annotatedWith(Driver.class).to(Person.class).in(Singleton.class);
bind(Person.class).annotatedWith(Inventor.class).to(Person.class).in(Singleton.class);
इसके लिए काम करने के लिए, आप यह सुनिश्चित करें कि Person
सिंगलटन में बाध्य नहीं है बनाना चाहिए गुंजाइश मॉड्यूल में या @Singleton
एनोटेशन के साथ स्पष्ट रूप से दायरा। this Gist में अधिक जानकारी।
संपादित करें: उदाहरण के रूप में मैं जो नमूना कोड देता हूं वह Guice Grapher Test से आता है। गुइस परीक्षणों को देखते हुए एपीआई का उपयोग करने के तरीके को बेहतर ढंग से समझने का एक शानदार तरीका है (जो अच्छी इकाई परीक्षणों के साथ प्रत्येक प्रोजेक्ट पर भी लागू होता है)।
स्रोत
2009-09-10 21:06:02
या एक @Provides विधि अगर यह निर्भरता है, मैं डॉक्स के इस बिट याद किया (http://code.google.com/docreader/#p=google-guice&s=google-guice&t=ProvidesMethods) निर्भरता कर सकते हैं विधि के पैरामीटर के रूप में पारित किया जाना चाहिए। इंजेक्टर विधि का आह्वान करने से पहले इनमें से प्रत्येक के लिए बाइंडिंग का प्रयोग करेगा। – Matt
आपको इसे किसी उदाहरण में बाध्य करने की आवश्यकता नहीं है। स्कोप सिंगलटन में एक ही कक्षा में दो अलग-अलग एनोटेशन, पहले से ही दो अलग-अलग उदाहरण बनाएंगे। –
@ फिलिप, मैंने कोशिश की कि आप क्या सुझाव दे रहे हैं, और दोनों टिप्पणियों के लिए एक ही उदाहरण प्राप्त किया। मैंने 'बाइंड (माईसिंगलेटन.क्लास) का उपयोग किया। एनोटेटेड (वन। क्लास) .to (MySingleton.class) .in (सिंगलटन.क्लास); बाइंड (MySingleton.class) .annotatedWith (Two.class) .to (MySingleton.class) .in (सिंगलटन.क्लास)। ' –