欄位注入
【Android Hilt 依賴注入完整教學】系列文章目錄:連結
Youtube 教學頻道:HKT線上教室
今天要跟大家分享如何在 Android 專案中使用 Hilt 框架來實現欄位注入(Field Injection)的技巧。這是接續我們之前討論依賴注入(Dependency Injection)概念的進階教學。
欄位注入(Field Injection)是 Hilt 提供的一種依賴注入方式,它允許我們直接在類別的欄位上標註 @Inject 來實現注入。相較於建構子注入(Constructor Injection),欄位注入的優點是使用方式更簡單直觀,特別適合在 Android 的元件(如 Activity、Fragment)中使用。
在開始實作之前,請確保你已經完成了 Hilt 的基本設定。如果還沒有設定,可以參考我們之前的文章「在 Android 專案中導入 Hilt 依賴注入框架指南」。
首先,要在 Android 專案中啟用 Hilt,我們需要:
@HiltAndroidApp
註解標註@HiltAndroidApp
class MyApplication : Application()
<application
android:name=".MyApplication"
...
/>
假設我們要在 Activity 中注入一個 Product
物件,首先要做的是:
@AndroidEntryPoint
class ProductActivity : AppCompatActivity() {
@Inject
lateinit var product: Product // 注意:欄位必須是 public
}
重要說明:
@AndroidEntryPoint
註解的作用:@Inject
註解的重要性:lateinit
關鍵字的必要性:為了讓 Hilt 知道如何建立 Product
物件,我們需要在 Product
類別中標註建構子:
class Product @Inject constructor() {
fun alert() {
Log.d("Product", "Product is alerting!")
}
}
@Inject
的建構子來建立 Product
實例:AlertSystem
),也需要適當地提供這些依賴的來源:執行應用程式後,您可以透過以下方式查看結果:
Product: Product is alerting!
這表示:
Product
類別的實例alert()
方法被呼叫並執行請注意,由於我們在 Product 類別中使用了 Log.d() 而不是 System.out.println(),所以需要在 Logcat 中過濾 "Product" 標籤來查看輸出。
在下一篇文章中,我們將探討如何處理更複雜的依賴注入情境,特別是如何透過建構子注入(Constructor Injection)來處理多層次的依賴關係。