使用Dagger2进行内部依赖注入

时间:2015-08-21 17:25:35

标签: android dependency-injection dagger-2

我想使用Dagger2。

说我有以下依赖项:

  • A类取决于B类
  • B类取决于C类

我尝试创建一个提供B和C的模块,以及一个提供A的Component,但是只有B注入A,而B中的C引用保持为空。

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

1 个答案:

答案 0 :(得分:1)

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

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