使用Dagger 2

时间:2017-05-24 14:08:50

标签: dependency-injection dagger-2

我正确地创建了这三个依赖项(我通过调试确认它们确实存在)使用Dagger 2,让我们称之为a, b, c,如下所示:

class Example {
    ...
    @Inject A a;
    @Inject B b;
    @Inject C c;
    ...
},

SomeModule提供如下:

@Module
class SomeModule {
    ...
    @Singleton @Provides A provideA(){return new A()};
    @Singleton @Provides B provideB(){return new B()};
    @Singleton @Provides C provideC(){return new C()};
    ...
},

并且组件非常简单:

@Component(modules = {SomeModule.class, ...})
class SomeComponent {
    ...
    void inject(Example example);
    ...
},

我需要他们创建另一个对象,我们称之为d, e,如下所示:

public Example(){
    DaggerSomeComponent.builder().build().inject(this);
    ...
    this.d = new D(c);
    this.e = new E(d, a, b);
    ...
}

我的问题是:是否有可能达到这样的目标?

class Example {
    ...
    @Inject A a;
    @Inject B b;
    @Inject C c;
    @Inject D d;
    @Inject E e;
    ...
    public Example(){
        DaggerSomeComponent.builder().build().inject(this);
        ...
    }
}

1 个答案:

答案 0 :(得分:1)

是的,@Provides methods can take parameters。 Dagger将在调用方法之前创建实例。

@Provides D provideD(C c){return new D(c)};
@Provides E provideE(A a, B b, D d){return new E(d, a, b)};