पर माइग्रेट करना मेरे पास वेनिला गिइस का उपयोग करके एक गिइस आधारित प्रोजेक्ट है; कोई असिस्टेड इंजेक्शन नहीं, कोई एओपी नहीं, कोई अतिरिक्त प्लगइन गुइस इत्यादि का विस्तार नहीं करता है। एंड्रॉइड पर इसे अधिक आसानी से चलाने के लिए, डैगर बेहतर समाधान की तरह दिखता है। प्रत्येक वर्ग की निर्भरता और @Inject
एनोटेशन के साथ एक कन्स्ट्रक्टर है। कोई फ़ील्ड या विधि इंजेक्शन का उपयोग नहीं किया जाता है।डेजर-आधारित प्रोजेक्ट को डैगर
मॉड्यूल काफी सरल (Guice एक overkill बनाने) और ज्यादातर की तरह बाइंडिंग शामिल हैं निम्नलिखित:
class SomethingModule extends AbstractModule {
protected void configure() {
Bind(Handler.class)
.annotatedWith(Names.named("something"))
.to(SomeImplementation.class);
}
}
}
और बाद में निम्नलिखित की तरह इस्तेमाल किया:
Injector inj = Guice.createInjector(new SomethingModule());
... = inj.getInstance(SampleInterface.class);
// and rest of the code.
दुर्भाग्य से, मैं नहीं कर सकता मेरे सिर को Daggers terminology के आसपास प्राप्त करें। क्या आप मुझे एक गेज मॉड्यूल के प्रत्यक्ष अनुवाद/रूपांतरण के साथ एक डैगर मॉड्यूल में मार्गदर्शन कर सकते हैं?
डैगर है:
- डैगर के अवयव।
- डैगर मॉड्यूल।
@Provides
@Inject
Guice है:
@Inject
@Named
(या किसी भी कस्टम एनोटेशन, अगर सही ढंग से लागू)।- हमारे मॉड्यूल
AbstractModule
का विस्तार कर रहे हैं। मॉड्यूल में @Provides
।- गुइस
Injector
मॉड्यूल से बनाया गया।
ये कैसे संबंधित हैं?
अद्यतन: EpicPandaForce के अच्छे उत्तर के अलावा, these slides भी मदद कर सकता है।
nitpick: 'बाँध के करीब डैगर समकक्ष (X.class) करें.अभियान (Y.class)' '@Provides एक्स provideX (वाई वाई) {y वापसी है, } ' –
@TavianBarnes लेकिन मॉड्यूल 'वाई' का उदाहरण कहां प्राप्त करेगा? आपको इसे कहीं बनाना है। – EpicPandaForce
यदि 'Y' में' @ इंजेक्ट 'कन्स्ट्रक्टर है, तो इसे स्वचालित रूप से कॉल किया जाएगा –