新手必看: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實驗室
24會員
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
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
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,展示實際應用中的最佳實踐。
Thumbnail
Android APP 開發教學 ,學習如何使用最新 Jetpack Compose UI 的 UI 工具包來創建現代化應用程式介面。幫助您提升開發效率,並打造出色的用戶體驗。無論您是初學者還是有經驗的開發者,這裡都有您需要的資源和範例,讓您輕鬆掌握 Jetpack Compose 的強大功能。
Thumbnail
Android APP 開發教學 ,學習如何使用最新 Jetpack Compose UI 的 UI 工具包來創建現代化應用程式介面。幫助您提升開發效率,並打造出色的用戶體驗。無論您是初學者還是有經驗的開發者,這裡都有您需要的資源和範例,讓您輕鬆掌握 Jetpack Compose 的強大功能。
Thumbnail
本課程學習如何使用 Android Studio 建立的第一個應用程式專案:Hello World。
Thumbnail
本課程學習如何使用 Android Studio 建立的第一個應用程式專案:Hello World。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News