Ketergantungan komponen - Gunakan ini saat Anda ingin menjaga dua komponen tetap independen.
Subkomponen - Gunakan ini saat Anda ingin tetap menyatukan dua komponen.
Saya akan menggunakan contoh di bawah ini untuk menjelaskan dependensi dan Subkomponen Komponen . Beberapa poin yang perlu diperhatikan tentang contoh ini adalah:
SomeClassA1dapat dibuat tanpa ketergantungan. ModuleAmenyediakan dan contoh SomeClassA1melalui provideSomeClassA1()metode ini.
SomeClassB1tidak dapat dibuat tanpa SomeClassA1. ModuleBdapat memberikan instance SomeClassB1hanya jika instance SomeClassA1dilewatkan sebagai argumen ke provideSomeClassB1()metode.
@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;
}
}
Belati akan mengurus lewat instance SomeClassA1sebagai argumen untuk provideSomeClassB1()metode pada ModuleBsetiap kali Komponen / Subkomponen menyatakan mendeklarasikan ModuleBdiinisialisasi. Kita perlu menginstruksikan Belati bagaimana memenuhi ketergantungan. Ini dapat dilakukan dengan menggunakan ketergantungan Komponen atau Subkomponen .
Ketergantungan komponen
Perhatikan poin-poin berikut dalam contoh ketergantungan Komponen di bawah ini:
ComponentBharus mendefinisikan ketergantungan melalui dependenciesmetode pada @Componentanotasi.
ComponentAtidak perlu mendeklarasikan ModuleB. Ini menjaga dua komponen independen.
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();
}
}
Subkomponen
Perhatikan poin-poin berikut dalam contoh SubComponent:
- Karena
ComponentBbelum mendefinisikan ketergantungan ModuleA, ia tidak dapat hidup mandiri. Itu menjadi tergantung pada komponen yang akan menyediakan ModuleA. Karenanya ia memiliki @Subcomponentanotasi.
ComponentAtelah dideklarasikan ModuleBmelalui metode antarmuka componentB(). Ini membuat kedua komponen tersebut berpasangan. Bahkan, ComponentBhanya dapat diinisialisasi melalui 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);
}
}