在吉斯,我已經當模塊構建的完全控制,並使用了一些模塊,我安裝構造函數參數。匕首模塊與構造函數的參數?
在匕首然而,引用其它模塊的方法是通過@Module包括註釋,並且不與創建模塊安裝的相同的方法呈現我。
是否有可能創建具有構造函數參數的多個模塊,一個理智的ObjectGraph?特別是那些能夠使用匕首編譯器工作,而不會遇到週期圖表的人?
在吉斯,我已經當模塊構建的完全控制,並使用了一些模塊,我安裝構造函數參數。匕首模塊與構造函數的參數?
在匕首然而,引用其它模塊的方法是通過@Module包括註釋,並且不與創建模塊安裝的相同的方法呈現我。
是否有可能創建具有構造函數參數的多個模塊,一個理智的ObjectGraph?特別是那些能夠使用匕首編譯器工作,而不會遇到週期圖表的人?
如果您有與使用同一個對象,那麼也許你應該該對象分成其自身的模塊多個模塊。例如,很多模塊使用的應用程序上下文,所以我有以下模塊:
@Module
public class ContextModule {
private final Context mContext;
public ContextModule(Context context) {
mContext = context;
}
@Provides
public Context provideContext() {
return mContext;
}
}
所以現在在其他模塊時,當我需要一個上下文對象我只是包括模塊。
例如:
@Module(entryPoints = { MyFragment.class }, includes = { ContextModule.class })
public class ServicesModule {
@Provides
public LocationManager provideLocationManager(Context context) {
return (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
}
@Provides
public Geocoder provideGeocoder(Context context) {
return new Geocoder(context);
}
}
然後,當我構造對象圖我最終只有一個模塊,是以應用程序上下文作爲其參數。
ObjectGraph.create()需要的模塊(可變參數)的變量列表,以便你能夠做到這一點:
ObjectGraph objectGraph = ObjectGraph.create(new ProductionModule(context), new OverridingTestModule());
在匕首的InjectionTest.java看一看(參見測試「moduleOverrides」那裏): https://github.com/square/dagger/blob/master/core/src/test/java/dagger/InjectionTest.java
這是正確的。還要注意,你也應該在覆蓋測試模塊中設置overrides = True。 – 2013-08-19 13:37:29
因此,這與我已經完成的類似,我可以爲每個傳遞給ObjectGraph.create()的模塊提供構造函數...但是,我注意到的是,如果嘗試使用。再加上()...延長ObjectGraph在這一點上,圖中似乎失去先前構建模塊和炸彈的任何知識了與一個異常時,它會嘗試重新創建一個包含的模塊。 – thebamaman 2013-04-15 20:45:34