Kodein-DI 7.0.0(一):初識Kodein_DI

  • 簡述

    ? Kodein-DI是一個非常實用的依賴注入框架,實際上,Kodein并不是一個依賴注入庫,官方稱之為依賴注入容器,它非常易于使用和配置。

    ? 為什么要使用Kodein-DI:

    1. 懶加載實例,只有在需要使用的時候,才會初始化對象。

    2. 不必關(guān)心依賴初始化順序,kodein會自動查找需要使用的對象。

    3. 通過providerfactory,可以很容易將類或接口綁定到它們的實例。

    4. 易于調(diào)試。

    ? Kodein-DI的優(yōu)點:

    1. 體積小,速度快,經(jīng)過優(yōu)化(廣泛使用內(nèi)聯(lián))。
    2. 使用DSL語法,簡單易讀。
    3. 不受泛型擦除的影響(比如Java)。
    4. 100%兼容Java、Android。
    5. 使用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ā)人員不再需要在erasedgeneric之間進行選擇,Kodein-DI使用generic進行泛型綁定。因此,無論是什么平臺,bind<List<String>>bind<List<Int>>都代表兩種不同的綁定。

    從7.0開始,Kodein-DI可以將泛型用于非JVM平臺,這是默認實現(xiàn)。但是,仍然可以通過erased方式強制擦除泛型。

    但是對于所有平臺來說,類型支持都是基于kotlin的typeOf()函數(shù),JVM類型使用了大量反射,因此其優(yōu)化程度較低。

?著作權(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ù)。

友情鏈接更多精彩內(nèi)容