घटक निर्भरता - जब आप दो घटकों को स्वतंत्र रखना चाहते हैं तो इसका उपयोग करें।
उपसंपादक - इसका उपयोग तब करें जब आप दो घटकों को युग्मित रखना चाहते हैं।
मैं घटक निर्भरता और सब- कम्यूटर को समझाने के लिए नीचे दिए गए उदाहरण का उपयोग करूंगा । उदाहरण के बारे में ध्यान देने योग्य कुछ बिंदु हैं:
SomeClassA1बिना किसी निर्भरता के बनाया जा सकता है। ModuleAप्रदान करता है और विधि के SomeClassA1माध्यम से उदाहरण provideSomeClassA1()।
SomeClassB1के बिना नहीं बनाया जा सकता SomeClassA1। केवल ModuleBएक उदाहरण प्रदान कर सकता है SomeClassB1यदि एक उदाहरण विधि के SomeClassA1तर्क के रूप में पारित किया जाता है provideSomeClassB1()।
@Module
public class ModuleA {
@Provides
public SomeClassA1 provideSomeClassA1() {
return new SomeClassA1();
}
}
@Module
public class ModuleB {
@Provides
public SomeClassB1 provideSomeClassB1(SomeClassA1 someClassA1) {
return new SomeClassB1(someClassA1);
}
}
public class SomeClassA1 {
public SomeClassA1() {}
}
public class SomeClassB1 {
private SomeClassA1 someClassA1;
public SomeClassB1(SomeClassA1 someClassA1) {
this.someClassA1 = someClassA1;
}
}
डैगर के कहने गुजर का ख्याल रखना होगा SomeClassA1करने के लिए एक तर्क के रूप provideSomeClassB1()में विधि ModuleBजब भी घटक / उप-घटक घोषणा ModuleBआरंभ नहीं हो जाता। हमें डैगर को निर्देश देने की आवश्यकता है कि निर्भरता को कैसे पूरा किया जाए। यह या तो घटक निर्भरता या उपसंयोजक का उपयोग करके किया जा सकता है ।
घटक निर्भरता
घटक निर्भरता उदाहरण में निम्नलिखित बातों पर ध्यान दें:
ComponentBएनोटेशन dependenciesपर विधि के माध्यम से निर्भरता को परिभाषित करना है @Component।
ComponentAघोषित करने की आवश्यकता नहीं है ModuleB। यह दो घटकों को स्वतंत्र रखता है।
public class ComponentDependency {
@Component(modules = ModuleA.class)
public interface ComponentA {
SomeClassA1 someClassA1();
}
@Component(modules = ModuleB.class, dependencies = ComponentA.class)
public interface ComponentB {
SomeClassB1 someClassB1();
}
public static void main(String[] args) {
ModuleA moduleA = new ModuleA();
ComponentA componentA = DaggerComponentDependency_ComponentA.builder()
.moduleA(moduleA)
.build();
ModuleB moduleB = new ModuleB();
ComponentB componentB = DaggerComponentDependency_ComponentB.builder()
.moduleB(moduleB)
.componentA(componentA)
.build();
}
}
उप-घटक
निम्नलिखित बिंदुओं को SubComponent उदाहरण में नोट करें:
- जैसा
ComponentBकि निर्भरता को परिभाषित नहीं किया गया है ModuleA, यह स्वतंत्र रूप से नहीं रह सकता है। यह उस घटक पर निर्भर हो जाता है जो प्रदान करेगा ModuleA। इसलिए इसमें एक @Subcomponentएनोटेशन है।
ComponentAModuleBइंटरफ़ेस विधि के माध्यम से घोषित किया गया है componentB()। यह दो घटकों को युग्मित करता है। वास्तव में, ComponentBकेवल के माध्यम से आरंभ किया जा सकता है ComponentA।
public class SubComponent {
@Component(modules = ModuleA.class)
public interface ComponentA {
ComponentB componentB(ModuleB moduleB);
}
@Subcomponent(modules = ModuleB.class)
public interface ComponentB {
SomeClassB1 someClassB1();
}
public static void main(String[] args) {
ModuleA moduleA = new ModuleA();
ComponentA componentA = DaggerSubComponent_ComponentA.builder()
.moduleA(moduleA)
.build();
ModuleB moduleB = new ModuleB();
ComponentB componentB = componentA.componentB(moduleB);
}
}