使用 Dagger2 进行内部依赖注入

Internal dependency injection using Dagger2

我想用Dagger2

假设我有以下依赖项:

我试图创建一个提供 B 和 C 的模块,以及一个提供 A 的组件,但是只有 B 被注入到 A 中,而 B 中对 C 的引用仍然为空。

我需要使用 dagger 实现的 classes 结构是什么?

您可以使用构造函数注入或字段注入;以及构造函数注入或模块注入。

Constructor-@Inject 可能有问题,因为我从一开始就一直在使用模块和组件。

@Singleton
public class A {
    B b;

    @Inject
    public A(B b) {
        this.b = b;
    }
}

@Singleton
public class B {
    C c;

    @Inject
    public B(C c) {
        this.c = c;
    }
}

@Singleton
public class C {
    @Inject
    public C() {
    }
}

@Singleton
@Component
public interface SingletonComponent {
    void inject(MainActivity mainActivity);
}

或者

public class A {
    private B b;

    public A(B b) {
        this.b = b;
    }
}

public class B {
    private C c;

    public B(C c) {
        this.c = c;
    }
}

public class C {
}

@Module
public class ProviderModule {
    @Provides
    @Singleton
    public A a(B b) {
        return new A(b);
    }

    @Provides
    @Singleton
    public B b(C c) {
        return new B(c);
    }

    @Provides
    @Singleton
    public C c() {
        return new C();
    }
}

@Component(modules={ProviderModule.class})
@Singleton
public interface SingletonComponent {
    A a();
    B b();
    C c();

    void inject(MainActivity mainActivity);
}

或使用字段注入

@Singleton
public class A {
    @Inject
    B b;

    @Inject    
    public A() {
    }
}

@Singleton
public class B {
    @Inject
    C c;

    public B() {
    }
}

@Singleton
public class C {
    @Inject
    public C() {
    }
}

@Component
@Singleton
public interface SingletonComponent {
    A a();
    B b();
    C c();

    void inject(MainActivity mainActivity);
}