在使用 Dagger 的項目中,您是否由於要弄清楚 Dagger 的依賴關係而產生疑惑?依賴項來自 @Inject 修飾的構造器、@Binds 仍是 @Provides 修飾的方法?它有限定符嗎?要搞清楚這個並不是易事。android
難道不能一鍵獲取相關信息甚至獲得更多內容嗎?固然能夠!git
最新的 Android Studio 4.1 版本 (目前已經在穩定版渠道發佈) 爲咱們帶來了一個新的「間距圖標」 (在編輯器和代碼行號之間的圖標,以下圖所示),經過點擊這個圖標,咱們能夠輕鬆地在 Dagger 的關聯代碼間進行導航,包括依賴項的生產者、消費者、組件、子組件以及模塊。您一樣能夠在 Find usages 中獲取相同的信息。github
在 Android Studio 4.2 中加入了更多針對 Hilt 的支持,除了上述列出的 Dagger 功能以外,您還能夠更便捷使用入口點 (entry points) 導航功能。編輯器
在 Android Studio 中新增的 Dagger 導航支持 ide
正如您所看到的,在 Android 應用中 Dagger 關係的導航從未如此簡單。新版本 Android Studio 將支持一鍵精確查找提供依賴項方法的功能。google
實踐
在 Android Studio 4.1 Canary 7 以後,您能夠在使用 Dagger 的項目中看到一個新的間距圖標:.net
Android Studio 中新的 Dagger 間距圖標3d
它們的點擊效果是:code
- 向上箭頭的圖標:提供類型的地方(即依賴項來自何處)
- 樹形的圖標:類型被看成依賴項使用的地方
讓咱們經過 GitHub 上的示例應用 architecture-samples 的 Dagger 分支 (dev-dagger),來展現新功能的使用。component
瞭解依賴項來自哪裏
在一個使用 Dagger 注入的類中,若是您在依賴項上點擊帶有向上箭頭的間距圖標,您將跳轉到使用 Dagger 註解提供對應類型的方法。
在下面的例子中,TasksViewModel 依賴了 TasksRepository。點擊間距圖標便可跳轉到 AppModuleBinds 類中提供 TasksRepository 對象的 @Bind 方法:
瞭解依賴項來自哪裏
支持限定符
如上所述,若是使用了限定符提供依賴項,此功能將會幫您精確跳轉到提供方法處。
DefaultTasksRepository 依賴了被限定符修飾的 TasksDataSource。點擊間距圖標將跳轉到 AppModule 中使用限定符提供對應類型的方法。
支持限定符
依賴項在哪裏被使用
當您有一個使用 Dagger 註解提供依賴項的方法時,您能夠點擊帶有向下箭頭的間距圖標來跳轉到依賴項的使用處。若是該依賴項被多個消費者使用,您能夠在列表中選擇目標進行跳轉。
在咱們的項目中,DefaultTasksRepository 使用在了不一樣的 ViewModels 中,具體是哪些呢?您能夠經過點擊提供方法的間距圖標來了解(此處使用 @Binds):
瞭解依賴項在哪裏被使用
Hilt 入口點
當您在一個 Hilt 的入口點 (entry point) 時,這個間距圖標能夠幫助您導航到依賴的來源。咱們撰寫了一個在 Android 中將 Dagger 遷移到 Hilt 的 codelab,在這個 codelab 裏,您可經過 android-dagger-to-hilt 工程的 interop 分支 的代碼來試用這個功能。
在入口點能夠導航到依賴的來源
Find Usages 功能
在 Android Studio 中可使用 Find usage 功能找到您 Dagger/ Hilt 代碼之間的關係。
若是您右鍵點擊 AppModuleBinds 類的 bindRepository 方法,選擇 Find usage,而後就會看到以下相似的界面內容:
爲 bindRepository 方法使用 Find usage 功能趕快嘗試起來!若是您在使用中出現任何問題,請及時向咱們 反饋問題。