Skip to content Skip to sidebar Skip to footer

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"