我正确地创建了这三个依赖项(我通过调试确认它们确实存在)使用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);
...
}
}
答案 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)};