Bileşen bağımlılıkları - İki bileşeni bağımsız tutmak istediğinizde bunu kullanın.
Alt bileşenler - İki bileşeni bir arada tutmak istediğinizde bunu kullanın.
Bileşen bağımlılıklarını ve Alt bileşenleri açıklamak için aşağıdaki örneği kullanacağım . Örnek hakkında dikkate değer bazı noktalar:
SomeClassA1
herhangi bir bağımlılık olmadan oluşturulabilir. yöntem aracılığıyla ModuleA
sağlar ve örneği .SomeClassA1
provideSomeClassA1()
SomeClassB1
olmadan yaratılamaz SomeClassA1
. ModuleB
bir örneğini sağlayabilir SomeClassB1
bir örneği sadece SomeClassA1
bir bağımsız değişken olarak geçirilir provideSomeClassB1()
yöntem.
@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;
}
}
Hançer , Bileşen / Alt Bileşen bildirimi her başlatıldığında yönteme SomeClassA1
bir argüman olarak geçmeye özen gösterir . Dagger'a bağımlılığı nasıl yerine getireceğini öğretmeliyiz. Bu, Bileşen bağımlılığı veya Alt Bileşen kullanılarak yapılabilir .provideSomeClassB1()
ModuleB
ModuleB
Bileşen bağımlılığı
Aşağıdaki Bileşen bağımlılığı örneğinde aşağıdaki noktalara dikkat edin:
ComponentB
ek açıklama dependencies
yöntemiyle bağımlılığı tanımlamak zorundadır @Component
.
ComponentA
beyan etmeye gerek yok ModuleB
. Bu, iki bileşeni bağımsız tutar.
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();
}
}
alt bileşen
Alt Bileşen örneğinde aşağıdaki noktalara dikkat edin:
ComponentB
Bağımlılığı tanımlayamadığı gibi , ModuleA
bağımsız olarak yaşayamaz. Sağlayacak bileşene bağımlı hale gelir ModuleA
. Dolayısıyla bir @Subcomponent
ek açıklaması vardır.
ComponentA
ModuleB
arayüz yöntemi ile beyan etti componentB()
. Bu, iki bileşeni birleştirir. Aslında, ComponentB
sadece üzerinden başlatılabilir 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);
}
}