Reputation: 7604
I have a Module and Component for a class when satisfy the dependency for instance of Class A.
@Module
public class ModuleA {
private ClassA classA;
public ModuleA(ClassA classA) {
this.classA = classA;
}
@Provides
ClassA providesClassA(){
return this.classA;
}
}
@Component(modules = {ModuleA})
public interface ComponentA {
void inject(ClassNeedingA classNeedingA);
}
@Module
public class ModuleB {
private ClassB classB;
public ModuleB(ClassB classB) {
this.classB = classB;
}
@Provides
ClassB providesClassB(){
return this.classB;
}
@Provides
ClassA providesClassA(ClassA classA){
return classA;
}
}
@Component(modules = {ModuleB})
public interface ComponentB {
void inject(ClassNeedingB classNeedingB);
}
public class classNeedingB{
@Inject
ClassB classB
@Inject
ClassA classA
public classNeedingB{
DaggerComponentB.builder().moduleB(new ModuleB(new ClassB()).componentA(DaggerComponentA.builder().moduleA(new ModuleA(new ClassA())).build()).build().inject();
}
}
ModuleB is in a completely different package and I would like to satisfy the dependency of the instance of classA in ModuleB. How would I get dagger to inject instance of ClassA in ClassNeedingB. So how do i make sure that ModuleB is dependant on ModuleA.
Thanks
Upvotes: 0
Views: 948
Reputation: 918
You can create dependencies between components to achieve what you want:
@Component(modules = {ModuleB}, dependencies = ComponentA.class)
public interface ComponentB {
void inject(ClassNeedingB classNeedingB);
}
To create the link all you need is to supply your ComponentA instance to ComponentB builder:
ComponentB componentB = DaggerComponentDependency_ComponentB.builder()
.moduleB(moduleB)
.componentA(componentA)
.build();
Upvotes: 1