入門學習如何使用 Dagger 依賴注入

更新於 發佈於 閱讀時間約 9 分鐘
raw-image

在現代 Android 開發中,依賴注入(Dependency Injection, DI)是構建可維護、可測試程式碼的關鍵技術。Dagger 作為 Google 推出的依賴注入框架,透過編譯時代碼生成大幅提升效能。本文將以 Kotlin 示範 Dagger 的實際應用。


一、導入 Dagger 依賴(Kotlin 配置)

// build.gradle (Module)
plugins {
id("kotlin-kapt") // 新增 Kapt 插件
}

dependencies {
// Dagger 核心庫
implementation("com.google.dagger:dagger:2.55") // 建議使用最新版本
kapt("com.google.dagger:dagger-compiler:2.55") // Kotlin 需用 kapt 取代 annotationProcessor
}

二、基礎依賴注入範例

1. 建立被注入類別

// User.kt
import javax.inject.Inject

class User @Inject constructor() // Kotlin 簡潔構造函數標注

2. 建立 Dagger 元件

// ApplicationComponent.kt
import dagger.Component
import com.tiger.dagger.MainActivity

@Component
interface ApplicationComponent {
fun inject(activity: MainActivity) // 函數參數自動辨識注入目標
}

3. Activity 中使用注入

// MainActivity.kt
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import javax.inject.Inject

class MainActivity : AppCompatActivity() {
@Inject
lateinit var user: User // Kotlin 使用 lateinit 延遲初始化

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

DaggerApplicationComponent.create().inject(this)
println("注入成功: ${user.hashCode()}")
}
}

三、模組化依賴注入

1. 建立 Retrofit 模組

// NetModule.kt
import dagger.Module
import dagger.Provides
import retrofit2.Retrofit

@Module
object NetModule { // Kotlin 建議使用 object 單例模組
@Provides
fun provideRetrofit(): Retrofit =
Retrofit.Builder()
.baseUrl("https://api.example.com/")
.build()
}

2. 更新元件配置

// ApplicationComponent.kt
@Component(modules = [NetModule::class])
interface ApplicationComponent {
fun inject(activity: MainActivity)
}

3. 多依賴注入使用

// MainActivity.kt
class MainActivity : AppCompatActivity() {
@Inject lateinit var user: User
@Inject lateinit var retrofit: Retrofit

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
DaggerApplicationComponent.create().inject(this)

println("Retrofit 實例: ${retrofit.baseUrl()}")
}
}

四、參數依賴注入

// ServiceModule.kt
@Module
object ServiceModule {
@Provides
fun provideApiService(retrofit: Retrofit, user: User): ApiService {
println("注入使用者到服務: ${user.hashCode()}")
return retrofit.create(ApiService::class.java)
}
}

五、作用域與單例模式

1. 應用級單例

// ApplicationScope.kt
import javax.inject.Scope

@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class AppScope

2. 單例元件配置

@AppScope
@Component(modules = [NetModule::class, ServiceModule::class])
interface ApplicationComponent {
fun inject(activity: MainActivity)
}

3. 模組單例實現

@Module
object DatabaseModule {
@AppScope
@Provides
fun provideDatabase(): AppDatabase =
Room.databaseBuilder(...).build()
}

六、進階技巧:Kotlin 擴展優化

元件初始化封裝

// DaggerExtensions.kt
fun Application.initDagger(): ApplicationComponent =
DaggerApplicationComponent
.factory()
.create(this)

在 Application 中使用

class MyApp : Application() {
val appComponent by lazy { initDagger() }
}

總結

通過以上步驟,我們成功地在 Kotlin 專案項目中使用了 Dagger 依賴注入框架。Dagger 可以幫助我們更好地管理依賴關係,使程式碼結構更加清晰,提高代碼的可維護性和可測試性。在實際的開發中,你可以根據項目的需求,擴展和完善 Dagger 的使用,引入更多的模塊和組件,以適應不同的業務場景。

avatar-img
13會員
258內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
HKT實驗室 的其他內容
在 Android 開發中,依賴注入(Dependency Injection, DI)是實現模組化、低耦合程式碼的核心技術。本文將深入分析 Koin、Hilt 和 Dagger 當前主流的 DI 框架, 這三者的優缺點,幫助開發者根據專案需求做出最佳選擇。
在 Android 開發中,依賴注入(Dependency Injection, DI)是實現模組化、低耦合程式碼的核心技術。本文將深入分析 Koin、Hilt 和 Dagger 當前主流的 DI 框架, 這三者的優缺點,幫助開發者根據專案需求做出最佳選擇。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本章節的目的是介紹Java中的套件使用,包括如何引用第三方套件和自定義模組,如何創建和使用自定義套件,以及介紹一些常見的Java標準庫套件。這些內容將幫助讀者更好地理解和使用Java的套件系統。
Thumbnail
本章節旨在教導讀者如何在 Kotlin 中引入套件。將會涵蓋如何引用第三方套件,如何引用自定義模組,以及如何創建和引用自定義套件。此外,還會列出一些常用的套件,以供讀者參考。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
本課程學習如何在 Kotlin 程式碼檔案中,設定 ImageView 圖片元件,顯示本地端圖片。
本課程學習如何在 Kotlin 程式碼檔案中,設定 EditText 輸入框元件。
本課程學習如何在 Kotlin 程式碼檔案中,設定 Toast 浮動式訊息元件,顯示提示文字訊息。
Thumbnail
根據初學者設計了 Kotlin 程式語言的基礎課程,從 Android Studio 到 Android App 開發,提供完整指引。由基礎開始,傳授開發技巧。課程分為三部分:環境安裝、常用元件與界面設計,以及高階技巧如 DataStore、Room 資料儲存與網路處理。
Thumbnail
Kotlin 是 Google 官方推薦的 Android 開發語言,具有簡潔、安全、高效等優點,受到越來越多開發者的青睞。如果你也想學習 Kotlin,卻不知道從哪裡開始,那麼這本【Kotlin 入門指南】就是你的最佳選擇。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本章節的目的是介紹Java中的套件使用,包括如何引用第三方套件和自定義模組,如何創建和使用自定義套件,以及介紹一些常見的Java標準庫套件。這些內容將幫助讀者更好地理解和使用Java的套件系統。
Thumbnail
本章節旨在教導讀者如何在 Kotlin 中引入套件。將會涵蓋如何引用第三方套件,如何引用自定義模組,以及如何創建和引用自定義套件。此外,還會列出一些常用的套件,以供讀者參考。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
本課程學習如何在 Kotlin 程式碼檔案中,設定 ImageView 圖片元件,顯示本地端圖片。
本課程學習如何在 Kotlin 程式碼檔案中,設定 EditText 輸入框元件。
本課程學習如何在 Kotlin 程式碼檔案中,設定 Toast 浮動式訊息元件,顯示提示文字訊息。
Thumbnail
根據初學者設計了 Kotlin 程式語言的基礎課程,從 Android Studio 到 Android App 開發,提供完整指引。由基礎開始,傳授開發技巧。課程分為三部分:環境安裝、常用元件與界面設計,以及高階技巧如 DataStore、Room 資料儲存與網路處理。
Thumbnail
Kotlin 是 Google 官方推薦的 Android 開發語言,具有簡潔、安全、高效等優點,受到越來越多開發者的青睞。如果你也想學習 Kotlin,卻不知道從哪裡開始,那麼這本【Kotlin 入門指南】就是你的最佳選擇。