依赖注入与 Hilt/Dagger 库简介
在现代 Kotlin(尤其是 Android)应用开发中,一个关键的架构概念是 依赖注入 (Dependency Injection, DI)。这是一种设计模式,对象从外部获取其依赖项,而不是自行创建它们。这使得代码更加灵活、可测试且易于维护。
Dagger 是 Google 开发的一个强大的 DI 框架,它在编译阶段生成代码。它保证所有依赖项都能正确提供,并消除因缺少依赖项而导致的运行时错误。然而,Dagger 因其复杂性而具有陡峭的学习曲线。
Hilt 是建立在 Dagger 之上的一个抽象层,旨在简化其在 Android 应用中的使用。Hilt 提供了标准组件、作用域注解以及与 Android 生命周期(Activity、Fragment、ViewModel 等)的自动集成。如果您使用 Kotlin 为 Android 编写代码,Hilt 是推荐的选择,因为它能显著减少样板代码。
在本文中,我们将详细探讨这两个库,但重点将放在 Hilt 上,因为它是一个更现代、更方便的工具。您将学习如何安装 Hilt,如何使用其主要注解和方法,并分析实际示例和常见错误。
在 Kotlin/Android 项目中安装 Hilt
Hilt 不是通过 pip 或 npm 安装的。它集成到 Gradle 项目中。对于 Kotlin 和 Android,过程如下:
1. 在根 build.gradle(项目级别)中添加 Hilt 插件
// build.gradle (Project)buildscript { repositories { google() mavenCentral() } dependencies { // ... 其他插件 classpath 'com.google.dagger:hilt-android-gradle-plugin:2.50' // 请检查最新版本 }}2. 在应用模块的 build.gradle(模块级别)中应用插件
// build.gradle (Module: app)plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'kotlin-kapt' // Hilt 必需 id 'dagger.hilt.android.plugin'}
android { // ... 您的配置}
dependencies { implementation 'com.google.dagger:hilt-android:2.50' kapt 'com.google.dagger:hilt-compiler:2.50'
// 用于 ViewModel(可选,但推荐) implementation 'androidx.hilt:hilt-navigation-compose:1.1.0' // 用于 Jetpack Compose // 或 implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03' // 用于旧版本}3. 配置 Application 类
每个使用 Hilt 的应用都必须有一个使用 @HiltAndroidApp 注解的 Application 类。
import android.app.Applicationimport dagger.hilt.android.HiltAndroidApp
@HiltAndroidAppclass MyApplication : Application() { override fun onCreate() { super.onCreate() // 应用初始化 }}别忘了在 AndroidManifest.xml 中指定此类:
<application android:name=".MyApplication" ... >快速入门及代码示例
让我们创建一个简单的示例:一个使用 Hilt 注入 Greeter 依赖项来问候用户的应用。
步骤 1:创建将被注入的类
import javax.inject.Inject
class Greeter @Inject constructor() { fun greet(name: String): String { return "Hello, $name!" }}构造函数上的 @Inject 注解告诉 Hilt 如何创建此类的实例。
步骤 2:在 Activity 中注入
import android.os.Bundleimport android.widge