Hilt 是基于 Dagger 开发的全新的依赖项注入代码库,它简化了 Android 应用中 Dagger 的调用方式。本文通过简短的代码片段为您展示其核心功能以帮助开发者们快速入门 Hilt。
配置 Hilt
如需在应用中配置 Hilt,请先参考 Gradle Build Setup。
完成安装全部的依赖和插件以后,仅需在您的 Application 类之前添加 @HiltAndroidApp 注解即可开始使用 Hilt,而无需其它操作。
@HiltAndroidApp
class App : Application()
定义并且注入依赖项
当您写代码用到依赖项注入的时候,有两个要点需要考虑:
- 您需要注入依赖项的类;
- 可以作为依赖项进行注入的类。
而上述这两点并不互斥,而且在很多情况下,您的类既可以注入依赖项同时也包含依赖。
使依赖项可注入
如果需要在 Hilt 中使某个类变得可注入,您需要告诉 Hilt 如何创建该类的实例。该过程叫做绑定 (bindings)。
在 Hilt 中定义绑定有三种方式:
- 在构造函数上添加
@Inject
注解; - 在模块上使用
@Binds
注解; - 在模块上使用
@Provides
注解。
⮕ 在构造函数上使用 @Inject
注解
任何类的构造函数都可以添加 @Inject
注解,这样该类在整个工程中都可以作为依赖进行注入。
class OatMilk @Inject constructor() {
...
}
⮕ 使用模块
在 Hilt 中另外两种将类转为可注入的方法是使用模块。
Hilt 模块 就好像 “菜谱”,它可以告诉 Hilt 如何创建那些不具备构造函数的类的实例,比如接口或者系统服务。
此外,在您的测试中,任何模块都可以被其它模块所替代。这有利于使用 mock 替换接口实现。
模块通过 @InstallIn 注解被安装在特定的 Hilt 组件 中。这一部分我会在后面详细介绍。
选项 1: 使用 @Binds
为接口创建绑定
如果您希望在需要 Milk
时候&#