2017-05-24 58 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)};