我有一個疑問,那就是在有加圖的情況下,在匕首中設置注入屬性(不是註釋)的正確位置。在匕首加'模塊中放置注入屬性的正確位置
我們有這樣的場景:
@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),但是,如果我有幾個模塊提供需要的不同綁定完成該實例的所有依賴關係?我是否必須創建一個包含所有其他模塊的模塊,並在其中放入注入屬性?
由於B不依賴於A,因此AdditionalModule應該在您呈現的狀態下完成。 –
是@DandreAllison它是實際代碼的精簡版本,其中有更多提供程序要求模塊不完整。儘管如此,這與我關於插入注入的問題無關,對吧? –
這就是爲什麼我把它放在評論。另一件事,你認爲「包括」領域?它可以讓你連接不同的模塊,當你創建一個帶有「includes」的模塊的ObjectGraph時,那麼所有可傳遞的包含模塊(de-dublicated)被添加到ObjectGraph中。 –