本文為 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注解的不同功能以及如何使用它們。
