2017-05-24 86 views
0

我有正确创建使用匕首2(我通过调试,他们确确实实存在验证它)这三个依赖关系,让我们称他们a, b, c,就像这样:@Provides方法与匕首内注入依赖2

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

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