Internal Dependency Injection Using Dagger2
I want to use Dagger2. Say I have the following dependencies: Class A depends on class B Class B depends on class C I tried to create a Module that provides B and C, and a Compon
Solution 1:
You can either use constructor injection or field injection; and either constructor-inject or module-inject.
Constructor-@Inject might be buggy, because I've been using Modules and Components since the dawn of time.
@SingletonpublicclassA {
B b;
@InjectpublicA(B b) {
this.b = b;
}
}
@SingletonpublicclassB {
C c;
@InjectpublicB(C c) {
this.c = c;
}
}
@SingletonpublicclassC {
@InjectpublicC() {
}
}
@Singleton@ComponentpublicinterfaceSingletonComponent {
voidinject(MainActivity mainActivity);
}
Or
publicclassA {
private B b;
publicA(B b) {
this.b = b;
}
}
publicclassB {
private C c;
publicB(C c) {
this.c = c;
}
}
publicclassC {
}
@ModulepublicclassProviderModule {
@Provides@Singletonpublic A a(B b) {
returnnewA(b);
}
@Provides@Singletonpublic B b(C c) {
returnnewB(c);
}
@Provides@Singletonpublic C c() {
returnnewC();
}
}
@Component(modules={ProviderModule.class})@SingletonpublicinterfaceSingletonComponent {
A a();
B b();
C c();
voidinject(MainActivity mainActivity);
}
or with field injection
@Singleton
public class A {
@Inject
B b;
@Inject
public A() {
}
}
@Singleton
public class B {
@Inject
C c;
publicB() {
}
}
@Singleton
public class C {
@Inject
public C() {
}
}
@Component@Singleton
public interface SingletonComponent {
Aa();
Bb();
Cc();
voidinject(MainActivity mainActivity);
}
Post a Comment for "Internal Dependency Injection Using Dagger2"