Hilt/Dagger 用于 Kotlin:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

依赖注入与 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                    

推荐