Dagger 导航从未如此简单 | Android Studio 4.1

Dagger 导航从未如此简单 | Android Studio 4.1

在使用 Dagger 的项目中,您是否因为要弄清楚 Dagger 的依赖关系而产生疑惑?依赖项来自 @Inject 修饰的构造器、@Binds 还是 @Provides 修饰的方法?它有限定符吗?要搞清楚这个并非易事。

难道不能一键获取相关信息甚至得到更多内容吗?当然可以!

Android Studio 4.1 版本为我们带来了一个新的 "间距图标" (在编辑器和代码行号之间的图标,如下图所示),通过点击这个图标,我们可以轻松地在 Dagger 的关联代码间进行导航,包括依赖项的生产者、消费者、组件、子组件以及模块。您同样可以在 Find usages 中获取相同的信息。

△ 在 Android Studio 中新增的 Dagger 导航支持

正如您所看到的,在 Android 应用中 Dagger 关系的导航从未如此简单。新版本 Android Studio 将支持一键精确查找提供依赖项方法的功能。

特别说明: 当前的功能将会在即将发布的 AS Canary 版本中得到优化。命名和图标可能会更改。在下文 "后续规划" 部分获取更多信息。

实践

在 Android Studio 4.1 Canary 7 之后,您可以在使用 Dagger 的项目中看到一个新的间距图标:

△ Android Studio 中新的 Dagger 间距图标

此 Canary 版本的标准如下:

  • 向上箭头的图标: 提供类型的地方 (即依赖项来自何处)
  • 向下箭头的图标: 类型被当作依赖项使用的地方

让我们通过 GitHub 上的示例应用 Dagger branch (dev-dagger) of the architecture-samples,来演示新功能的使用。

了解依赖项来自哪里

在一个使用 Dagger 注入的类中,如果您在依赖项上点击带有向上箭头的间距图标,您将跳转到使用 Dagger 注解提供对应类型的方法。

在下面的例子中,TasksViewModel 依赖了 TasksRepository。点击间距图标即可跳转到 AppModuleBinds 类中提供 TasksRepository 对象的 @Bind 方法:

△ 了解依赖项来自哪里

同样支持限定符

如上所述,如果使用了限定符提供依赖项,此功能将会帮您精确跳转到提供方法处。

DefaultTasksRepository 依赖了被限定符修饰的 TasksDataSource。点击间距图标将跳转到 AppModule 中使用限定符提供对应类型的方法。

△ 同样支持限定符

依赖项在哪里被使用

当您有一个使用 Dagger 注解提供依赖项的方法时,您可以点击带有向下箭头的间距图标来跳转到依赖项的使用处。如果该依赖项被多个消费者使用,您可以在列表中选择目标进行跳转。

在我们的项目中,DefaultTasksRepository 使用在了不同的 ViewModels 中,具体是哪些呢?您可以通过点击提供方法的间距图标来了解 (此处使用 @Binds):

△ 了解依赖项在哪里被使用

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

在子组件中,点击间距图标可得知哪些组件使用了该子组件:

△ 了解子组件被哪个组件使用

Find Usages

您可以在 Android Studio 使用 Find Usages 功能来获得同样的信息。目前该功能仅可在 .java 文件中使用。在 Android Studio 的后续版本中将会支持 Kotlin 文件。

如果您在另一个使用 Dagger 的 Java 项目中尝试,则会看到类似下面的内容:

△ Find usages 关于 Dagger 关联代码的新功能

后续规划

接下来发布的 Android Studio Canary 版本将提供新的功能,如下:

  • 支持多模块项目
  • 支持 Kotlin 文件的 Find usages 功能
  • 识别常用定义 Dagger 模块的 Kotlin 单例类
  • 了解组件的子组件
  • 更多内容 ...

赶快尝试起来!如果您在使用中出现任何问题,请及时向我们 反馈问题

版权声明

禁止一切形式的转载-禁止商用-禁止衍生 申请授权

脉脉不得语
脉脉不得语
Zhengzhou Website
Android Developer | https://androiddevtools.cn and https://androidweekly.io WebMaster | GDG Zhengzhou Funder & Ex Organizer | http://Toast.show(∞) Podcast Host

你已经成功订阅到 Android 开发技术周报
太棒了!接下来,完成检验以获得全部访问权限 Android 开发技术周报
欢迎回来!你已经成功登录了。
Unable to sign you in. Please try again.
成功!您的帐户已完全激活,您现在可以访问所有内容。
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.