Dagger 導(dǎo)航從未如此簡單 | Android Studio 4.1

在使用 Dagger 的項目中,您是否因為要弄清楚 Dagger 的依賴關(guān)系而產(chǎn)生疑惑?依賴項來自 @Inject 修飾的構(gòu)造器、@Binds 還是 @Provides 修飾的方法?它有限定符嗎?要搞清楚這個并非易事。

難道不能一鍵獲取相關(guān)信息甚至得到更多內(nèi)容嗎?當(dāng)然可以!

最新的 Android Studio 4.1 版本 (目前在 Canary 預(yù)覽版發(fā)布渠道可以下載) 為我們帶來了一個新的 "間距圖標(biāo)"?(在編輯器和代碼行號之間的圖標(biāo),如下圖所示),通過點擊這個圖標(biāo),我們可以輕松地在 Dagger 的關(guān)聯(lián)代碼間進行導(dǎo)航,包括依賴項的生產(chǎn)者、消費者、組件、子組件以及模塊。您同樣可以在?Find usages?中獲取相同的信息。

△ 在 Android Studio 中新增的 Dagger 導(dǎo)航支持??

正如您所看到的,在 Android 應(yīng)用中 Dagger 關(guān)系的導(dǎo)航從未如此簡單。新版本 Android Studio 將支持一鍵精確查找提供依賴項方法的功能。

特別說明: 當(dāng)前的功能將會在即將發(fā)布的 AS Canary 版本中得到優(yōu)化。命名和圖標(biāo)可能會更改。在下文 "后續(xù)規(guī)劃"?部分獲取更多信息。

實踐

在 Android Studio 4.1 Canary 7 之后,您可以在使用 Dagger 的項目中看到一個新的間距圖標(biāo):

△ Android Studio 中新的 Dagger 間距圖標(biāo)??

此 Canary 版本的標(biāo)準如下:

向上箭頭的圖標(biāo):?提供類型的地方 (即依賴項來自何處)

向下箭頭的圖標(biāo):?類型被當(dāng)作依賴項使用的地方

讓我們通過 GitHub 上的示例應(yīng)用?Dagger branch (dev-dagger) of the architecture-samples,來演示新功能的使用。

了解依賴項來自哪里

在一個使用 Dagger 注入的類中,如果您在依賴項上點擊帶有向上箭頭的間距圖標(biāo),您將跳轉(zhuǎn)到使用 Dagger 注解提供對應(yīng)類型的方法。

在下面的例子中,TasksViewModel 依賴了 TasksRepository。點擊間距圖標(biāo)即可跳轉(zhuǎn)到 AppModuleBinds 類中提供 TasksRepository 對象的 @Bind 方法:

△ 了解依賴項來自哪里

同樣支持限定符

如上所述,如果使用了限定符提供依賴項,此功能將會幫您精確跳轉(zhuǎn)到提供方法處。

DefaultTasksRepository 依賴了被限定符修飾的 TasksDataSource。點擊間距圖標(biāo)將跳轉(zhuǎn)到 AppModule 中使用限定符提供對應(yīng)類型的方法。

△ 同樣支持限定符

依賴項在哪里被使用

當(dāng)您有一個使用 Dagger 注解提供依賴項的方法時,您可以點擊帶有向下箭頭的間距圖標(biāo)來跳轉(zhuǎn)到依賴項的使用處。如果該依賴項被多個消費者使用,您可以在列表中選擇目標(biāo)進行跳轉(zhuǎn)。

在我們的項目中,DefaultTasksRepository 使用在了不同的 ViewModels 中,具體是哪些呢?您可以通過點擊提供方法的間距圖標(biāo)來了解 (此處使用 @Binds):

△ 了解依賴項在哪里被使用??

了解組件使用了哪些子組件

在子組件中,點擊間距圖標(biāo)可得知哪些組件使用了該子組件:

△ 了解子組件被哪個組件使用

Find Usages

您可以在 Android Studio 使用 Find Usages 功能來獲得同樣的信息。目前該功能僅可在 .java 文件中使用。在 Android Studio 的后續(xù)版本中將會支持 Kotlin 文件。

如果您在另一個使用 Dagger 的 Java 項目中嘗試,則會看到類似下面的內(nèi)容:

△ Find usages 關(guān)于 Dagger 關(guān)聯(lián)代碼的新功能??

后續(xù)規(guī)劃

接下來發(fā)布的 Android Studio Canary 版本將提供新的功能,如下:

? 支持多模塊項目

? 支持 Kotlin 文件的 Find usages 功能

? 識別常用定義 Dagger 模塊的 Kotlin 單例類

? ?了解組件的子組件

? ? 更多內(nèi)容 ...

趕快嘗試起來!如果您在使用中出現(xiàn)任何問題,請及時向我們反饋問題。

點擊這里在 GitHub 中查看本文示例應(yīng)用?Dagger branch (dev-dagger) of the architecture-samples

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

友情鏈接更多精彩內(nèi)容