Hilt 是 Jetpack 推荐使用的 Android 应用依赖项注入 (DI) 解决方案,现已稳定。这意味着 Hilt 已经完全可以在生产环境中使用。Hilt 相比 Dagger 更加便捷,同时也能帮您减少模板代码,它专为 Android 而生,并集成了多个 Jetpack 依赖库。很多公司已在他们的应用中使用了 Hilt 并从中获益。
Hilt
https://developer.android.google.cn/training/dependency-injection/hilt-android
依赖项注入 (DI)
https://developer.android.google.cn/training/dependency-injection
2020 年 6 月,Hilt 首次发布预览版,它肩负着定义 Android 依赖项注入标准方案的使命,也是自那时起,我们收到了来自开发者的海量反馈。这些反馈不仅改善了 Hilt,而且使我们明确了我们走在正确的道路上。
首次发布
https://medium.com/androiddevelopers/dependency-injection-on-android-with-hilt-67b6031e62d
Hilt 无需手动创建依赖项关系图,也无需手动注入并传递类型,而是在编译期自动根据注解生成所需代码。Hilt 通过实现工作中的复杂部分以及生成所有模板代码替代手动编写,帮您从 DI 的最佳实践中获得最大收益。此外,Hilt 与 Android 完全集成,可以帮助您自动管理 Android Framework 类的依赖项关系图的生命周期。
让我们通过一个简单示例观察 Hilt 的行为!配置 Hilt 之后,在项目中从无到有地向 Activity 注入ViewModel 就像在代码中添加注解一样容易,如下所示:
配置 Hilt 之后
https://developer.android.google.cn/training/dependency-injection/hilt-android#setup
@HiltAndroidApp // 在应用中配置 Hilt
class MyApplication : Application() { ... }
// 使 Hilt 识别该 ViewModel
@HiltViewModel
class LoginViewModel @Inject constructor(
private val savedStateHandle: SavedStateHandle,
/*…Hilt 关注的其他依赖项... */
) : ViewModel() { ... }
// 使该 Activity 使用正确的 ViewModel 工厂,并注入其他依赖项
@AndroidEntryPoint
class LoginActivity : AppCompatActivity() {
private val loginViewModel: LoginViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// loginViewModel 已经可以使用
}
}
除了上述内容,让您在应用中选择使用 Hilt 还有哪些理由呢?