घटक निर्भरता - जब आप दो घटकों को स्वतंत्र रखना चाहते हैं तो इसका उपयोग करें।
उपसंपादक - इसका उपयोग तब करें जब आप दो घटकों को युग्मित रखना चाहते हैं।
मैं घटक निर्भरता और सब- कम्यूटर को समझाने के लिए नीचे दिए गए उदाहरण का उपयोग करूंगा । उदाहरण के बारे में ध्यान देने योग्य कुछ बिंदु हैं:
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
एनोटेशन है।
ComponentA
ModuleB
इंटरफ़ेस विधि के माध्यम से घोषित किया गया है 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);
}
}