2013-11-20 46 views
1

我有一個疑問,那就是在有加圖的情況下,在匕首中設置注入屬性(不是註釋)的正確位置。在匕首加'模塊中放置注入屬性的正確位置

我們有這樣的場景:

@Module(injects = ClassWithInjects.class, complete = false) 
public final class BaseModule { 

    @Provides 
    DependencyA providesA() { return new A(); } 
    @Provides 
    DependencyB providesB() { return new B(); } 
    ... 
} 

class ClassWithInjects { 
    @Inject 
    A a; 
    @Inject 
    B b; 
} 

是在做時工作正常:

ObjectGraph graph = ObjectGraph.create(new BaseModule()).plus(new Object[0]); // no modules used to plus by default 
graph.inject(new ClassWithInjects()); 

後來我們增加了一個新的模塊,這是唯一一個應該從這一刻起,提供B:

@Module(injects = ClassWithInjects.class, complete = false) 
public final class BaseModule { 

    @Provides 
    DependencyA providesA() { return new A(); } 
    ... 
} 

@Module(addsTo = BaseModule.class, complete = false) 
public final class AdditionalModule { 
    @Provides 
    DependencyB providesB() { return new B(); } 
} 

class ClassWithInjects { 
    @Inject 
    A a; 
    @Inject 
    B b; 
} 

即與

失敗

ObjectGraph graph = ObjectGraph.create(new BaseModule()).plus(new AdditionalModule()); 
graph.inject(new ClassWithInjects()); 

當我移動

器將其作品= ClassWithInjects.class

IllegalStateException異常沒有對B結合這樣做時,需要通過類 ClassWithInjects

從BaseModule到AdditionalModule的屬性。

那麼,在使用plus'ed模塊時,我應該在哪裏放置injects屬性?它是否必須位於調用.plus(...)時用作參數的模塊之一中?

根據this github issue我必須將模型中的注入放在具有綁定的模塊中,我嘗試將依賴關係注入(上例中的ClassWithInjects),但是,如果我有幾個模塊提供需要的不同綁定完成該實例的所有依賴關係?我是否必須創建一個包含所有其他模塊的模塊,並在其中放入注入屬性?

+0

由於B不依賴於A,因此AdditionalModule應該在您呈現的狀態下完成。 –

+0

是@DandreAllison它是實際代碼的精簡版本,其中有更多提供程序要求模塊不完整。儘管如此,這與我關於插入注入的問題無關,對吧? –

+0

這就是爲什麼我把它放在評論。另一件事,你認爲「包括」領域?它可以讓你連接不同的模塊,當你創建一個帶有「includes」的模塊的ObjectGraph時,那麼所有可傳遞的包含模塊(de-dublicated)被添加到ObjectGraph中。 –

回答