在Kodein 3.x
有一個新模塊可用,稱爲kodein-conf
。這允許您創建一個可修改的Kodein實例(只要您在第一次注入完成之前修改它),並且它還包含一個Kodein全局實例以供共享使用(如果需要的話)。這與正常的Kodein實例相反,必須在構建時定義所有綁定並且永遠不能修改。
使用預定義的全局和參考Kodein.global
一樣簡單。它的工作原理與任何配置Kodein例如:
Kodein.global.addImport(someModule) // add other modules to it
val something: SomethingCool = Kodein.global.instance() // inject from it
如果你想使自己的全局:
val kodeinGlobal = ConfigurableKodein()
更多關於ConfigurableKodein
閱讀Kodein 3.x
docs for ConfigurableKodein,以及有關預定義的全局實例The God Complex: One True Kodein
作爲幫手,您可以使用新的KodeinGlobalAware
界面在您的課堂中自然地訪問Kodein instanc而無需直接參考全球Kodein實例。例如通過增加這個接口,你可以調用該實例的創建方法,如:
class DefaultSomeService(): SomeService, KodeinGlobalAware {
val mapper: ObjectMapper = instance()
// ...
}
或者,如果你有一個情況下(如測試),您要使用的全局實例,除非有特定的覆蓋例如,你可以做類似的東西:
class DefaultSomeService(override val kodein: Kodein = Kodein.global): SomeService, KodeinAware {
val mapper: ObjectMapper = instance()
// ...
}
其中採用KodeinAware
接口和覆蓋其抽象成員變量kodein
做同樣的透明類型的類內注射,而默認爲global
實例。
如果您只想注入Kodein,無論這是全局實例還是特定的實例,請參閱:Injecting Kodein instances within binding declarations作爲替代方案。