मैं एक कोर एंड्रॉयड लाइब्रेरी मैं एक CoreComponent विज्ञापन एक CoreModule द्वारा प्रदान की कक्षाओं के उदाहरण सुई @Singleton दायरे का उपयोग करके जहां परिभाषित करने कर रहा हूँ है पर एक ही स्कोप के साथ कई घटक के बीच एक ही उदाहरण प्रदान करें।डैगर 2: अलग पुस्तकालय मॉड्यूल
@Singleton
@Component(modules = {CoreModule.class})
public interface CoreComponent {
void inject(SomeClass target);
}
@Module
public class CodeModule {
@Singleton
@Provides
CoreRepository provideCoreRepository() {
return new CoreRepositoryImpl();
}
}
मैं एक और एंड्रॉयड लाइब्रेरी कि मुख्य लाइब्रेरी पर निर्भर करता है और एक अन्य घटक उपयोग कर रहा है से एक ही @Singleton उदाहरणों का उपयोग करना चाहते हैं।
@Singleton
@FooScope
@Component(modules = {CoreModule.class, FooModule.class})
public interface FooComponent {
void inject(SomeActivity target);
}
public class FooActivity extends AppCompatActivity {
@Inject
public CoreRepository repo;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
injectDependencies();
super.onCreate(savedInstanceState);
}
[...]
}
उपरोक्त कोड बनाता है लेकिन @Singleton गुंजाइश घटक के लिए "स्थानीय" है। दूसरे शब्दों में दो सिंगलटन उदाहरण हैं, एक कोरकंपोनेंट के लिए और एक FooComponent के लिए।
Android Application
├── Foo Library
| └── Core Library
├── Bar Library
| └── Core Library
·
·
·
└── Core Library
मुझे लगता है कि सबसे अच्छा समाधान एक उप-घटक का उपयोग करना चाहिए, लेकिन, दुर्भाग्य से, संभव प्रतीत नहीं होता क्योंकि मुख्य लाइब्रेरी अन्य पुस्तकालयों का कोई दृश्यता है।
वहाँ अगर वर्ग एक ही स्कोप के साथ टिप्पणी की जाती है डैगर साथ घटकों के बीच एक वर्ग का एक ही उदाहरण साझा करने के लिए एक और रास्ता नहीं है?
@Singleton
@Component(modules = {CoreModule.class})
public interface CoreComponent {
CoreRepository coreRepository();
}
आपके आवेदन के अंदर इस सिंगलटन-दायरे वाले घटक के लिए एक संदर्भ बनाएँ:: -
आप [घटक निर्भरता] में देखा है में इंजेक्षन कर सकते हैं (http://stackoverflow.com/q/29587130/1426891) अभी तक? [जावाडोक] (https://google.github.io/dagger/api/latest/dagger/Component.html#component-dependencies) यहाँ देखें और ध्यान दें कि आप स्पष्ट रूप से ऐसा है कि आपके CoreComponent पर कुछ अतिरिक्त एक्सेसर तरीकों का पर्दाफाश करने की आवश्यकता हो सकती है कि FooComponent उन्हें कॉल कर सकते हैं। –
चेकआउट https://stackoverflow.com/questions/27036933/how-to-set-up-dagger-dependency-injection-from-scratch-in-android-project जो स्कोप और आश्रित घटकों का उपयोग करने का एक उदाहरण है –