android - 使用 Dagger2 进行内部依赖注入(inject)

标签 android dependency-injection dagger-2

我想使用 Dagger2。

假设我有以下依赖项:

  • A类依赖于B类
  • B类依赖于C类

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

我需要使用 dagger 实现什么类结构?

最佳答案

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

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);
}

或者使用字段注入(inject)

@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);
}

关于android - 使用 Dagger2 进行内部依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32146077/

相关文章:

dagger-2 - 为什么不安装 AndroidInjectionModule 仍然可以工作?

java - 运行时异常: NullPointerException with SQLite Database

java - 如何使用新的 OSGi 声明式服务注释?

c# - ParameterOverride 在 System.Type 参数上失败

c# - 如何在 SignalR hub 的 Unity IoC 容器中注入(inject)依赖项?

android - Dagger 2 如何让 Android 上的测试更容易?

android - Dagger 2 Scope for Fragments 通信

java - 使用 ITextPDF 保存 PDF 文件

javascript - 使用 setTimeout 或动画 css3 时如何使用 Phonegap 和固定的 div?

android - Maven 或 Ant + Ivy