入門學習如何使用 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
留言分享你的想法!
avatar-img
HKT實驗室
25會員
266內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
HKT實驗室的其他內容
2025/01/27
本文介紹如何在 Android 專案中使用 Hilt Modules,強調其在依賴注入中的重要性。Modules 有助於組織和提供依賴,管理複雜關係,提供介面實作,並控制物件生命週期。將深入探討 Modules 的概念、使用時機與實作方式。
Thumbnail
2025/01/27
本文介紹如何在 Android 專案中使用 Hilt Modules,強調其在依賴注入中的重要性。Modules 有助於組織和提供依賴,管理複雜關係,提供介面實作,並控制物件生命週期。將深入探討 Modules 的概念、使用時機與實作方式。
Thumbnail
2025/01/27
本篇文章分享如何在 Android 專案中使用 Hilt 框架實現建構子注入 (Constructor Injection)。補充什麼是建構子,建構子注入基礎與相依類別的設定與 Application 和 Activity Context 注入方式。
Thumbnail
2025/01/27
本篇文章分享如何在 Android 專案中使用 Hilt 框架實現建構子注入 (Constructor Injection)。補充什麼是建構子,建構子注入基礎與相依類別的設定與 Application 和 Activity Context 注入方式。
Thumbnail
2025/01/27
本篇文章分享如何在 Android 專案中使用 Hilt 框架實現欄位注入(Field Injection)。欄位注入是 Hilt 提供的一種依賴注入方式,允許開發者在類別的欄位上直接使用 @Inject 標註來進行注入。
Thumbnail
2025/01/27
本篇文章分享如何在 Android 專案中使用 Hilt 框架實現欄位注入(Field Injection)。欄位注入是 Hilt 提供的一種依賴注入方式,允許開發者在類別的欄位上直接使用 @Inject 標註來進行注入。
Thumbnail
看更多
你可能也想看
Thumbnail
本文介紹如何在 Android 專案中使用 Hilt Modules,強調其在依賴注入中的重要性。Modules 有助於組織和提供依賴,管理複雜關係,提供介面實作,並控制物件生命週期。將深入探討 Modules 的概念、使用時機與實作方式。
Thumbnail
本文介紹如何在 Android 專案中使用 Hilt Modules,強調其在依賴注入中的重要性。Modules 有助於組織和提供依賴,管理複雜關係,提供介面實作,並控制物件生命週期。將深入探討 Modules 的概念、使用時機與實作方式。
Thumbnail
本篇文章分享如何在 Android 專案中使用 Hilt 框架實現建構子注入 (Constructor Injection)。補充什麼是建構子,建構子注入基礎與相依類別的設定與 Application 和 Activity Context 注入方式。
Thumbnail
本篇文章分享如何在 Android 專案中使用 Hilt 框架實現建構子注入 (Constructor Injection)。補充什麼是建構子,建構子注入基礎與相依類別的設定與 Application 和 Activity Context 注入方式。
Thumbnail
本篇文章分享如何在 Android 專案中使用 Hilt 框架實現欄位注入(Field Injection)。欄位注入是 Hilt 提供的一種依賴注入方式,允許開發者在類別的欄位上直接使用 @Inject 標註來進行注入。
Thumbnail
本篇文章分享如何在 Android 專案中使用 Hilt 框架實現欄位注入(Field Injection)。欄位注入是 Hilt 提供的一種依賴注入方式,允許開發者在類別的欄位上直接使用 @Inject 標註來進行注入。
Thumbnail
本篇文章將深入介紹 Android Hilt 依賴注入的基本設定步驟,幫助開發者快速上手這個由 Google 官方推出的相依性注入框架。
Thumbnail
本篇文章將深入介紹 Android Hilt 依賴注入的基本設定步驟,幫助開發者快速上手這個由 Google 官方推出的相依性注入框架。
Thumbnail
本篇文章介紹 Android 開發中的依賴注入(Dependency Injection,DI)概念,強調其在現代開發中的重要性。依賴注入能解決類別之間的緊密耦合問題,提升程式碼的可重用性、測試便利性及重構的容易性。文章中舉例說明了未使用依賴注入的缺陷,並展示了使用依賴注入的改良方案。
Thumbnail
本篇文章介紹 Android 開發中的依賴注入(Dependency Injection,DI)概念,強調其在現代開發中的重要性。依賴注入能解決類別之間的緊密耦合問題,提升程式碼的可重用性、測試便利性及重構的容易性。文章中舉例說明了未使用依賴注入的缺陷,並展示了使用依賴注入的改良方案。
Thumbnail
本文提供全面的 Android Hilt 依賴注入框架完整教學目錄,涵蓋基礎概念、注入方式、進階功能及測試實務。透過這些內容,開發者能夠深入理解並有效學習並運用 Android Hilt 進行依賴注入 Dependency Injection。
Thumbnail
本文提供全面的 Android Hilt 依賴注入框架完整教學目錄,涵蓋基礎概念、注入方式、進階功能及測試實務。透過這些內容,開發者能夠深入理解並有效學習並運用 Android Hilt 進行依賴注入 Dependency Injection。
Thumbnail
本篇文章展示 Android 開發中 Hilt 依賴注入的運用。它基於 Kotlin、Jetpack Compose 等技術搭建,採用 MVVM 架構,利用 Room 存儲數據。Hilt 通過多種注解實現依賴注入,可助學習 Hilt 等多項技術。
Thumbnail
本篇文章展示 Android 開發中 Hilt 依賴注入的運用。它基於 Kotlin、Jetpack Compose 等技術搭建,採用 MVVM 架構,利用 Room 存儲數據。Hilt 通過多種注解實現依賴注入,可助學習 Hilt 等多項技術。
Thumbnail
本篇文章詳細介紹如何在 Android 開發中使用 Dagger 2 進行依賴注入,並提供 GitHub 開源程式碼連結。專案基於 MVVM 架構,採用 Jetpack Compose 構建現代化 UI,展示實際應用中的最佳實踐。
Thumbnail
本篇文章詳細介紹如何在 Android 開發中使用 Dagger 2 進行依賴注入,並提供 GitHub 開源程式碼連結。專案基於 MVVM 架構,採用 Jetpack Compose 構建現代化 UI,展示實際應用中的最佳實踐。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News