簡要
依賴項注入簡稱:DI
遵循 DI 的原則可以為良好的應用架構奠定基礎
實現依賴項注入可為您帶來以下優勢:
重用代碼
易於重構
易於測試
1. 非依賴項注入 vs 依賴項注入
以下非依賴項注入為Android官方範例
class Car { private val engine = Engine() fun start() { engine.start() } } fun main(args: Array) { val car = Car() car.start() }

靈活性低,重用性低,測試不方便,需要重建Car才能更換engine
以下依賴項注入為Android官方範例
//第一種構造函式注入 class Car(private val engine: Engine) { fun start() { engine.start() } } fun main(args: Array) { val engine = Engine() val car = Car(engine) car.start() } //第二種字段注入(或 setter 注入) class Car { lateinit var engine: Engine fun start() { engine.start() } } fun main(args: Array) { val car = Car() car.engine = Engine() car.start() }

靈活性高,重用性高,測試方便,不需要重建Car,就可以更新engine
以上這些皆為手動依賴項注入
手動依賴像注入缺點,類越多、依賴項越多、項目越大,操作起來越繁瑣,也可能會產生而外的問題
2. 自動依賴項注入
有一些庫通過自動執行創建和提供依賴項的過程解決此問題。它們歸為兩類:
- 基於反射的解決方案,可在運行時連接依賴項。
- 靜態解決方案,可生成在編譯時連接依賴項的代碼。
Dagger 是適用於 Java、Kotlin 和 Android 的熱門依賴項注入庫,由 Google 進行維護。 Dagger 為您創建和管理依賴關係圖,從而便於您在應用中使用 DI。它提供了完全靜態和編譯時依賴項,解決了基於反射的解決方案(如 Guice)的諸多開發和性能問題。
在 Android 應用中使用 Hilt
Hilt 是推薦用於在 Android 中實現依賴項注入的 Jetpack 庫。 Hilt 通過為項目中的每個 Android 類提供容器並自動為您管理其生命週期,定義了一種在應用中執行 DI 的標準方法。
Hilt 在熱門 DI 庫 Dagger 的基礎上構建而成,因而能夠受益於 Dagger 提供的編譯時正確性、運行時性能、可伸縮性和 Android Studio 支持。
之後會有幾篇文章介紹Dagger與Hilt
以上內容參考Android 官網
相關文章
Android Dagger基本知識與簡單測試 | Android 應用中使用Dagger-1 |
簡要 1. Android使用Dagger前置作業 2. 基本使用方法 | 簡要 建構方法 |
Android 應用中使用Dagger-2 | |
1. Dagger 子组件 2. 為子組件分配作用域 3. 構建 Dagger 圖的最佳做法 4. 使用 Dagger 模塊 |
訂閱Codeilin的旅程,若有最新消息會通知。
廣告