新手必看:Android Dagger 入門範例,輕鬆實現依賴注入!

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

本範例學習如何在 Android 開發中使用 Dagger 依賴注入技術。

GitHub 開源程式碼:連結

這是一個基於 Dagger 2 的 Android 範例專案,展示了如何利用 Dagger 2 進行依賴注入管理。專案採用現代 Android 開發技術,並提供實際應用中的最佳實踐,幫助開發者輕鬆實現依賴注入。

UI 畫面

raw-image

技術特點

1. 依賴注入 (Dependency Injection)

  • 使用 Dagger 2.55 進行依賴注入
  • 實現 @Singleton 單例模式
  • 使用 @Inject 構造函數注入
  • 使用 @Component@Module 管理依賴關係

2. 架構模式

  • 採用 MVVM (Model-View-ViewModel) 架構
  • 使用 Repository 模式管理數據
  • 清晰的關注點分離

3. UI 技術

  • 使用 Jetpack Compose 構建現代化 UI
  • Material Design 3 設計規範
  • 響應式 UI 更新
  • 安全區域調整

專案結構

com.hkt.daggerdemo/
├── data/
│ └── UserRepository.kt # 數據層:管理用戶數據
├── di/
│ ├── AppComponent.kt # Dagger 組件:定義注入點
│ └── ViewModelModule.kt # Dagger 模組:提供 ViewModel
├── ui/
│ └── UserViewModel.kt # 視圖模型:處理業務邏輯
└── MainActivity.kt # UI 層:用戶界面

核心功能

  1. 用戶管理
    • 新增用戶
    • 顯示用戶列表
    • 即時 UI 更新
  2. 錯誤處理
    • 完整的異常捕獲
    • 詳細的日誌記錄
    • 用戶輸入驗證

關鍵實現細節

1. 依賴注入設置

@Singleton
@Component(modules = [ViewModelModule::class])
interface AppComponent {
fun inject(activity: MainActivity)
}

2. ViewModel 注入

class UserViewModel @Inject constructor(
private val userRepository: UserRepository
) : ViewModel()

3. Repository 實現

@Singleton
class UserRepository @Inject constructor() {
private val users = mutableListOf<String>()
// ...
}

最佳實踐

  1. 依賴注入
    • 使用 @Singleton 確保單例
    • 通過 @Inject 實現構造函數注入
    • 使用 Module 管理複雜依賴
  2. UI 設計
    • 使用 safeDrawingPadding() 確保內容不被系統 UI 遮擋
    • 實現單行輸入限制
    • 即時響應數據變化
  3. 錯誤處理
    • 使用 try-catch 捕獲異常
    • 分級日誌記錄
    • 用戶友好的錯誤提示

開發環境要求

  • Android Studio Hedgehog 或更高版本
  • Kotlin 1.9.0 或更高版本
  • Minimum SDK: 24
  • Target SDK: 35
  • JDK 11

依賴項

// Dagger
implementation("com.google.dagger:dagger:2.55")
kapt("com.google.dagger:dagger-compiler:2.55")

// Jetpack Compose
implementation(platform("androidx.compose:compose-bom:2025.01.00"))
implementation("androidx.compose.material3:material3")

如何使用

  1. Clone 專案
  2. 在 Android Studio 中打開專案
  3. 等待 Gradle 同步完成
  4. 運行應用程式

學習要點

  1. Dagger 基礎
    • 理解 @Inject@Component@Module 的使用
    • 掌握依賴注入的基本原理
  2. MVVM 架構
    • ViewModel 與 UI 的交互
    • Repository 模式的應用
  3. Jetpack Compose
    • 聲明式 UI 的構建
    • 狀態管理和更新

時序圖

raw-image

時序流程說明

1. 應用程式初始化階段

  • AppComponent(核心元件)在應用啟動時進行初始化。
  • AppComponent 主動連結 ViewModelModule(視圖模型模組),配置後續依賴關係。
  • ViewModelModule 回傳依賴配置資訊至 AppComponent,完成基礎設定。

2. Activity 創建階段

  • MainActivity(主畫面)創建時,向 AppComponent 發起 inject(this) 請求,觸發依賴注入流程。
  • AppComponentViewModelModule 請求獲取 UserViewModel(使用者資料的視圖模型)。
  • ViewModelModule 開始創建 UserViewModel,但發現其依賴 UserRepository(資料儲存庫):
    • 情境分支
      • 首次創建: UserViewModel 要求 UserRepository 提供實例,UserRepository 建立新單例並回傳。
      • 已有現存實例: UserRepository 直接回傳既有的單例實例。
  • AppComponent 完成依賴注入,將 UserViewModel 提供給 MainActivity

3. 使用者操作階段

  • 使用者在 MainActivity 觸發操作(例如新增使用者),呼叫 UserViewModeladdUser() 方法。
  • UserViewModel 將資料儲存任務委派給 UserRepository
  • UserRepository 完成資料持久化操作後,回傳結果至 UserViewModel
  • UserViewModel 根據結果更新內部狀態,並通知 MainActivity 刷新 UI 介面。

關鍵元件角色

  • AppComponent:核心依賴注入容器,負責協調模組間的依賴關係。
  • ViewModelModule:提供 UserViewModel 的工廠方法,管理其所需依賴。
  • UserViewModel:封裝業務邏輯,作為 UI 層與資料層的中介。
  • UserRepository:資料存取層的單例,統一管理本地或遠端資料操作。
avatar-img
13會員
251內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
HKT實驗室 的其他內容
在現代 Android 開發中,依賴注入(Dependency Injection, DI)是構建可維護、可測試程式碼的關鍵技術。Dagger 作為 Google 推出的依賴注入框架,透過編譯時代碼生成大幅提升效能。本文將以 Kotlin 示範 Dagger 的實際應用。 一、導入 Dagger
在 Android 開發中,依賴注入(Dependency Injection, DI)是實現模組化、低耦合程式碼的核心技術。本文將深入分析 Koin、Hilt 和 Dagger 當前主流的 DI 框架, 這三者的優缺點,幫助開發者根據專案需求做出最佳選擇。
在現代 Android 開發中,依賴注入(Dependency Injection, DI)是構建可維護、可測試程式碼的關鍵技術。Dagger 作為 Google 推出的依賴注入框架,透過編譯時代碼生成大幅提升效能。本文將以 Kotlin 示範 Dagger 的實際應用。 一、導入 Dagger
在 Android 開發中,依賴注入(Dependency Injection, DI)是實現模組化、低耦合程式碼的核心技術。本文將深入分析 Koin、Hilt 和 Dagger 當前主流的 DI 框架, 這三者的優缺點,幫助開發者根據專案需求做出最佳選擇。
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
本課程學習如何使用 Intent 傳遞整包資料。
Thumbnail
本課程學習如何在 Kotlin 程式碼檔案中,設定 ImageView 圖片元件,顯示本地端圖片。
本課程主要學習 Android Studio 建立初始(Empty View Activity)專案中的重要目錄資料夾和檔案。
本課程學習如何使用 Android Studio 中的導覽列功能,快速查看方法(function、method)。
本課程學習如何在 Android Studio 上建立手機模擬器。
本課程學習如何建立的第一個 Android Studio 應用程式專案:Hello World。
Thumbnail
本課程介紹開發 Android 手機應用程式所需的開發軟體。建議使用 Google 官方的開發軟體 Android Studio,因其提供完整的支援且免費。
Thumbnail
根據初學者設計了 Kotlin 程式語言的基礎課程,從 Android Studio 到 Android App 開發,提供完整指引。由基礎開始,傳授開發技巧。課程分為三部分:環境安裝、常用元件與界面設計,以及高階技巧如 DataStore、Room 資料儲存與網路處理。
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
本課程學習如何使用 Intent 傳遞整包資料。
Thumbnail
本課程學習如何在 Kotlin 程式碼檔案中,設定 ImageView 圖片元件,顯示本地端圖片。
本課程主要學習 Android Studio 建立初始(Empty View Activity)專案中的重要目錄資料夾和檔案。
本課程學習如何使用 Android Studio 中的導覽列功能,快速查看方法(function、method)。
本課程學習如何在 Android Studio 上建立手機模擬器。
本課程學習如何建立的第一個 Android Studio 應用程式專案:Hello World。
Thumbnail
本課程介紹開發 Android 手機應用程式所需的開發軟體。建議使用 Google 官方的開發軟體 Android Studio,因其提供完整的支援且免費。
Thumbnail
根據初學者設計了 Kotlin 程式語言的基礎課程,從 Android Studio 到 Android App 開發,提供完整指引。由基礎開始,傳授開發技巧。課程分為三部分:環境安裝、常用元件與界面設計,以及高階技巧如 DataStore、Room 資料儲存與網路處理。