-
簡述
? Kodein-DI是一個非常實用的依賴注入框架,實際上,Kodein并不是一個依賴注入庫,官方稱之為依賴注入容器,它非常易于使用和配置。
? 為什么要使用Kodein-DI:
懶加載實例,只有在需要使用的時候,才會初始化對象。
不必關(guān)心依賴初始化順序,kodein會自動查找需要使用的對象。
通過
provider或factory,可以很容易將類或接口綁定到它們的實例。易于調(diào)試。
? Kodein-DI的優(yōu)點:
- 體積小,速度快,經(jīng)過優(yōu)化(廣泛使用內(nèi)聯(lián))。
- 使用DSL語法,簡單易讀。
- 不受泛型擦除的影響(比如Java)。
- 100%兼容Java、Android。
- 使用kolin風(fēng)格編碼
-
簡單示例
kotlin的綁定很簡單:
val di = DI { bind<Dice>() with provider { RandomDice() } }聲明綁定后,Kodein-DI允許注入或檢索類之間的依賴關(guān)系。如果不想讓類了解依賴關(guān)系,則可以在類構(gòu)造時注入依賴關(guān)系:
class Controller(private val dice: Dice) { /*...*/ } //初始化Controller val controller: Controller by di.newInstance { Controller(instance()) } /*...*/如果希望類自行處理依賴關(guān)系,可以使用這種方式初始化
class Controller(override val di: DI) : DIAware { private val dice by instance<Dice>() /*...*/ } //初始化Controller val controller: Controller = Controller(di) /*...*/ -
平臺兼容性
從6.3.0開始,Kodein-DI在JVM上最低支持版本為JDK1.8
從7.0.0開始,開發(fā)人員不再需要在
erased與generic之間進行選擇,Kodein-DI使用generic進行泛型綁定。因此,無論是什么平臺,bind<List<String>>與bind<List<Int>>都代表兩種不同的綁定。從7.0開始,Kodein-DI可以將泛型用于非JVM平臺,這是默認實現(xiàn)。但是,仍然可以通過
erased方式強制擦除泛型。但是對于所有平臺來說,類型支持都是基于kotlin的
typeOf()函數(shù),JVM類型使用了大量反射,因此其優(yōu)化程度較低。
Kodein-DI 7.0.0(一):初識Kodein_DI
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。