新手必看: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
15會員
261內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言
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 追蹤
本課程學習如何使用 Intent 傳遞整包資料。
Thumbnail
本課程學習如何在 Kotlin 程式碼檔案中,設定 ImageView 圖片元件,顯示本地端圖片。
本課程主要學習 Android Studio 建立初始(Empty View Activity)專案中的重要目錄資料夾和檔案。
本課程學習如何使用 Android Studio 中的導覽列功能,快速查看方法(function、method)。
本課程學習如何在 Android Studio 上建立手機模擬器。
Thumbnail
本課程學習如何使用 Android Studio 建立的第一個應用程式專案:Hello World。
Thumbnail
本篇文章將介紹開發 Android 手機應用程式所需的開發軟體,Google 官方的開發工具 Android Studio。這款軟體不僅免費,還提供完整的支援,適合所有 Android 開發者使用。
Thumbnail
根據初學者設計了 Kotlin 程式語言的基礎課程,從 Android Studio 到 Android App 開發,提供完整指引。由基礎開始,傳授開發技巧。課程分為三部分:環境安裝、常用元件與界面設計,以及高階技巧如 DataStore、Room 資料儲存與網路處理。
本課程學習如何使用 Intent 傳遞整包資料。
Thumbnail
本課程學習如何在 Kotlin 程式碼檔案中,設定 ImageView 圖片元件,顯示本地端圖片。
本課程主要學習 Android Studio 建立初始(Empty View Activity)專案中的重要目錄資料夾和檔案。
本課程學習如何使用 Android Studio 中的導覽列功能,快速查看方法(function、method)。
本課程學習如何在 Android Studio 上建立手機模擬器。
Thumbnail
本課程學習如何使用 Android Studio 建立的第一個應用程式專案:Hello World。
Thumbnail
本篇文章將介紹開發 Android 手機應用程式所需的開發軟體,Google 官方的開發工具 Android Studio。這款軟體不僅免費,還提供完整的支援,適合所有 Android 開發者使用。
Thumbnail
根據初學者設計了 Kotlin 程式語言的基礎課程,從 Android Studio 到 Android App 開發,提供完整指引。由基礎開始,傳授開發技巧。課程分為三部分:環境安裝、常用元件與界面設計,以及高階技巧如 DataStore、Room 資料儲存與網路處理。