[Android] Dagger2 初學筆記 — 以 Kotlin 進行常用函式庫依賴注入

Lionel Hsiao
Nov 8, 2017

--

最近在學習 Dependency Injection 相關的實作的時候,發現了 Dagger2 這個 Android 平台上常用的套件,也剛好在練習 Kotlin ,於是這篇嘗試參考 User’s Guide 與一些網路文章之後,把一些自己常用的函式庫改用 Kotlin 做基礎依賴注入當作練習。

配置 Gradle

這次練習的環境為 Android Studio 3.0 (gradle android plugin 3.0.0),往下看之前先確認專案是否已經能夠使用 Kotlin ,確認之後打開 app/build.gradle ,將下列的 plugin 與 dependencies 加入檔案中。

app/build.gradle

設定 Dagger Component/Module

接著就可以正式開始設定 Dagger:

  • Inject:用來標註需要注入的目標,標註在變數上產生 _MembersInjector 而標註在建構子上會為該目標產生 _Factory 類別。
  • Component:用來連結目標與依賴成員的媒介,我們只需要定義 interface , Dagger 會產生注入的實作。
簡單的 Inject/Component
  • Module:當依賴對象需要較複雜的產生方式時,可以藉由宣告 Module 類別提供更詳細的建構細節。
  • Provides:在 Module 中可以根據目標依賴對象的類別宣告產生函式,用以生成各自的實體。
加入 Module 的注入方式

不管有無使用 Module,上面兩個例子都完成了 Student 中對於所依賴的 Test 物件注入。

Application 依賴注入範例

看過基礎的依賴注入之後,接著我們以 Retrofit 作為 Application 生成階段的函式庫/基礎功能初始化範例。在此 Module 簡單分成了 Context 為主的 AppModule 與網路相關的 NetworkModule 兩部份:

  • AppModule:提供 Context 與 Application
  • NetworkModule:提供 Retrofit 以及將其初始化所需的 Gson 與 OkHttpClient
Component and Module

成功完成 Component 與 Module 的設定,系統將自動以生成 Component 介面生成 Dagger[ComponentName] 實體,即可在 Application 中操作:

藉由 AppComponent 注入Retrofit 實體

小結

完成上述操作之後,我們就可以不需要在 Application 一步一步的產生 OkHttpClient 、 Gson 來生成 Retrofit 物件;同理我們可以以此為基準繼續擴充:對 Google Analytic … 等等的函式庫進行依賴注入,減少大量的初始化描述,使得 Application 中的內容可以聚焦在本身的邏輯上。

Reference

--

--

Lionel Hsiao
Lionel Hsiao

Written by Lionel Hsiao

買書比看書快,主題生冷不忌但對行距過寬的書本過敏。喜歡游泳,最近被推進潛水這個大坑。https://github.com/cwhsiaoo

No responses yet