新手必看: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
留言分享你的想法!
avatar-img
HKT實驗室
23會員
261內容數
哈囉!歡迎光臨我的沙龍!我是 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
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
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 等多項技術。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News