Jetpack Hilt 依赖注入框架
什么是依赖注入
一个类里面有一个变量,这个变量就是这个类的依赖。然后通过外部注入对这个变量进行赋值,这种就叫做依赖注入。
Hilt 是什么
Hilt 是 Android 的依赖注入库,基于 Dagger 构建。Hilt 专门为 Android 打造,创建了一组标准的组件和作用域。这些组件会自动集成到 Android 程序中的生命周期中。在使用的时候可以指定使用的范围,使其作用在对应的生命周期当中。
Hilt 常用的注解含义
@HiltAndroidApp
@HiltAndroidApp 将会触发 Hilt 的代码生成,作为程序依赖项的基类。 生成的 Hilt 依附于 Application 的生命周期,它是 App 的父组件,提供访问其他组件的依赖。 在 Application 中配置好后,就可以使用 Hilt 提供的组件了;组件包含 Application、Activity、Fragment、View、Service 等。 创建一个依赖容器,该容器遵循 Android 的生命周期,目前支持的类型是:Activity, Fragment, View, Service, BroadcastReceiver。
@Inject
使用 @Inject 来告诉 Hilt 如何提供该类的实例,常用于构造方法、非私有字段、方法中。 Hilt 有关如何提供不同类型的实例信息也称之为绑定。
@Module
Module 是用来提供一些无法用 @Inject 构造的依赖,如第三方库、接口、Build 模式的构造等。 使用 @Module 注解的类,需要使用 @InstallIn 注解指定 module 的范围。 增加了 @Module 注解的类,其实代表的就是一个模块,并通过指定的组件来告诉在那个容器中可以使用绑定安装。
@InstallIn
使用 @Module 注入的类,需要使用 @InstallIn 注解指定 module 的范围。 例如使用 @InstallIn(ActivityComponent::class) 注解的 module 会绑定到 Activity 的生命周期上。
@Provides
常用于被 @Module 注解标记类的内部方法上,并提供依赖项对象。
@EntryPoint
Hilt 支持最常见的 Android 类 Application、Activity、Fragment、View、Service、BroadcastReceiver 等等,但是您可能需要在 Hilt 不支持的类中执行依赖注入,在这种情况下可以使用 @EntryPoint 注解进行创建,Hilt 会提供相应的依赖。
Hilt 中的组件 (Component)
使用 @Module 注解的类,需要使用 @InstallIn 注解来指定 module 的范围。 例如 @InstallIn(ApplicationComponent::class) 注解的 Module 就会绑定到 Application 的生命周期上。 Hilt 提供了以下组件来绑定依赖与对应 Android 类的活动范围:
| Hilt 组件 | 对应 Android 类活动的范围 |
|---|---|
| ApplicationComponent | Application |
| ActivityRetainedComponent | ViewModel |
| ActivityComponent | Activity |
| FragmentComponent | Fragment |
| ViewComponent | View |
| ViewWithFragmentComponent | View annotated with @WithFragmentBindings |


