在 Android 中依賴注入,使用 Hilt

本文為 Manuel Vivo 發(fā)布于 Medium 的文章譯文
原文鏈接為 Dependency injection on Android with Hilt
本文僅作為個人學習記錄所用。如有涉及侵權,請相關人士盡快聯(lián)系譯文作者。

依賴注入(DI)是一種在編程中廣泛使用的技術,非常適合 Android 開發(fā)。在 Android 開發(fā)中,將依賴項提供給類,而不是自己創(chuàng)建依賴項。 通過遵循 DI 原則,您將為良好的應用程序體系結構,更高的代碼可重用性和易于測試奠定基礎。 您是否曾經嘗試過在應用程序中進行手動依賴項注入? 即使使用當今許多現(xiàn)有的依賴項注入庫,由于您的項目越來越大,它仍需要大量樣板代碼,因為您必須手動構造每個類及其依賴項,并創(chuàng)建容器以重用和管理依賴項。

通過遵循DI原則,您將為良好的應用程序體系結構,更高的代碼可重用性和易于測試奠定基礎

通過為項目中的每個Android類提供容器并為你自動管理其生命周期,新的Hilt庫定義了一種在應用程序中執(zhí)行DI的標準方法。Hilt目前處于Alpha狀態(tài),請在您的應用中進行嘗試,并使用此鏈接向我們提供反饋。

Hilt基于流行的DI庫Dagger構建,因此可以從Dagger提供的編譯時間正確性,運行時性能,可伸縮性和Android Studio支持中受益。 因此,Dagger在Google Play商店的前1萬款應用中占74%的廣泛采用率。 但是,由于生成了編譯時代碼,因此預期編譯時間會增加。

由于許多Android框架類都是由操作系統(tǒng)本身實例化的,因此在Android應用中使用Dagger時會有一個關聯(lián)的樣板。 與Dagger不同,Hilt與Jetpack庫和Android框架類集成在一起,并刪除了大部分樣板,使您可以專注于定義和注入綁定的重要部分,而不必擔心管理所有Dagger設置和編寫。 它會自動生成并提供:

  • 用于將Android框架類與Dagger集成的組件,否則需要手工創(chuàng)建。
  • Hilt自動生成的組件的范圍注釋。
  • 預定義的綁定和限定符。

最重要的是,由于Dagger和Hilt可以共存,因此可以根據(jù)需要遷移應用程序。

Hilt 在項目中的實踐

為了向您展示Hilt的易用性,讓我們在典型的Android應用中執(zhí)行一些快速DI。 讓我們用Hilt將AnalyticsAdapter注入MainActivity。
首先,使用@HiltAndroidApp注釋應用程序類以觸發(fā)Hilt的代碼生成,從而在您的應用程序中啟用Hilt:

@HiltAndroidApp
class MyApplication : Application() { ... }

其次,通過用@Inject注釋其構造函數(shù)來告訴Hilt如何提供AnalyticsAdapter的實例:

class AnalyticsAdapter @Inject constructor() { ... }

第三,要將AnalyticsAdapter的實例注入MainActivity,請在活動中使用@AndroidEntryPoint批注啟用Hilt,并使用@Inject批注執(zhí)行字段注入:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
  @Inject lateinit var analytics: AnalyticsAdapter
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // analytics instance has been populated by Hilt
    // and it's ready to be used
  }
}

有關更多信息,您可以在下面的備忘單部分中輕松查看新注釋的功能。

附帶Jetpack支持!

您可以在開箱即用的情況下使用喜愛的Jetpack庫。 在此版本中,我們?yōu)閂iewModel和WorkManager提供直接注入支持。
例如,要將架構組件ViewModel,LoginViewModel注入LoginActivity:用@ViewModelInject注釋LoginViewModel并按預期在activity或fragment中使用它:
文檔中了解有關Jetpack支持的更多信息。

開始使用Hilt

如果您對Hilt感興趣,并且想了解更多有關此的信息,請按照以下偏好的方式學習一些資源:

Hilt入門
借助本指南,了解如何在您的Android應用中添加Hilt。

文獻資料
如果您是DI或Dagger的新手,請查看我們的指南,將Hilt添加到Android應用中。 另外,如果您已經了解Dagger,我們還將提供有關dagger.dev的文檔。
如果您只是對新的注解以及Hilt的用途感到好奇,請在以下部分中查看該備忘單。

對于Dagger用戶
如果您已經在應用中使用了Dagger或dagger.android,請查看此遷移指南或下面提到的代碼實驗室,以幫助您切換到Hilt。 由于Dagger和Hilt可以共存,因此您可以逐步遷移應用程序。

代碼實驗室
為了逐步學習Hilt,我們剛剛發(fā)布了兩個代碼實驗室:

代碼示例
您想查看在現(xiàn)有應用中如何使用Hilt嗎? 在Google I / O 2020應用程序Android體系結構示例Github存儲庫的dev-hilt分支中檢查其用法。

反饋
Hilt目前處于Alpha狀態(tài),請在您的應用中進行嘗試,并使用此鏈接向我們提供反饋。

備忘單
該備忘單使您可以快速查看Hilt和Dagger注解的不同功能以及如何使用它們。

cheat-sheet.png

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容