Kotlin使用 Hilt 注入用法

Hilt介绍

Hilt 是 Google 开发的一个依赖注入框架,专门为 Android 应用设计。它简化了依赖注入的过程,并与 Android 的生命周期和组件集成,使得代码更加清晰、可维护和可测试
1.依赖注入(DI)概念:

  • 依赖注入是一种设计模式,允许一个对象接收它运行所需的其他对象。在 Android 中,这通常意味着将服务、存储库、数据库等外部依赖项注入到活动(Activities)、片段(Fragments)和其他组件中。
    2.Hilt 的集成:
  • 要在 Android 项目中使用 Hilt,首先需要在项目的 build.gradle 文件中添加 Hilt 的依赖和插件。
  • 在应用的入口点(通常是 Application 类)上添加 @HiltAndroidApp 注解来启用 Hilt。
    3.定义组件和依赖关系:
  • 使用 @Module 注解来定义提供依赖项的模块。这些模块告诉 Hilt 如何创建和提供依赖项。
  • 在需要注入依赖项的类中使用 @Inject 注解来标记构造函数或字段。
    4.绑定依赖关系:
  • 在模块中,使用 @Binds 或 @Provides 注解来定义如何将依赖项绑定到具体的实现。
  • @Binds 通常用于接口和抽象类的绑定,而 @Provides 用于具体类的实例创建。
    5.注入依赖项:
  • 在需要依赖项的类中,使用 @Inject 注解来标记构造函数或字段,以便 Hilt 在运行时注入依赖项。
  • Hilt 会自动处理依赖项的创建和注入,使得代码更加简洁和清晰。
    6.支持 Android 生命周期:
  • Hilt 支持 Android 的生命周期,这意味着它可以管理依赖项的生命周期,确保它们在适当的时候被创建和销毁。
    7.测试和调试:
  • 由于依赖项是通过 Hilt 注入的,这使得在单元测试和集成测试中模拟依赖项变得容易。
    8.优势:
  • Hilt 简化了依赖注入的过程,减少了手动创建和管理依赖项的代码。
  • 它与 Android 的生命周期和组件紧密集成,减少了内存泄漏和其他潜在问题。
  • 提高了代码的可维护性、可测试性和重用性。
    总的来说,Hilt 是一个强大的依赖注入框架,它使得在 Android Kotlin 项目中管理依赖项变得更加简单和直观。通过合理使用 Hilt,开发者可以写出更加健壮、可维护和可测试的代码。
开始集成
在config.gradle中写法
ext {
    android = [
            compileSdkVersion: 33,
            minSdkVersion    : 21,
            targetSdkVersion : 33,
            versionCode      : 30,
            versionName      : "3.2.7"

    ]

    dependVersion = [
            hilt             : "2.42",
    ]

    versions = [
            compileSdk         : 33,
            targetSdk          : 33,
            minSdk             : 17,
            ndk                : '25.0.8775105',
            androidxAppcompat  : '1.5.0',
            androidxAnnotations: '1.4.0',
            androidxTest       : '1.4.0',
            coroutines         : '1.6.4',
            leakCanary         : '2.9.1',
            kotlin             : '1.7.10',
            material           : '1.6.1'
    ]

    commonDeps = [
            
            "hilt"                    : "com.google.dagger:hilt-android:${dependVersion.hilt}",
            "mmkv"                    : 'com.tencent:mmkv:1.3.0'
    ]

    commonLibs = commonDeps.values()
}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation rootProject.ext.commonLibs
   

}

在 Kotlin 和 Android 的 Dagger 依赖注入框架中,@Module 和 @InstallIn 注解是用来定义和配置依赖注入模块的。这些注解允许你声明和提供应用所需的依赖项。
@Module
@Module 注解用于标记一个类作为 Dagger 的模块。在这个类中,你可以定义如何提供应用所需的依赖项。这通常通过 @Provides 注解的方法来完成,这些方法会返回你想要注入的依赖项实例。

@InstallIn
@InstallIn 注解用于指定模块应该安装到哪个 Dagger 组件中。Dagger 2.x 引入了组件的概念,以更好地组织和管理依赖项。组件是 Dagger 用来封装和提供依赖项的对象。
@InstallIn 注解接收一个组件类型作为参数,例如 SingletonComponent::class,表示这个模块应该在单例组件中安装。这意味着该模块提供的依赖项将具有单例生命周期,与应用的整个生命周期一致。

在Application添加注解
@HiltAndroidApp
class MyApplication : BaseApplication() {}

在布局中的用法

@AndroidEntryPoint
class TestlFragment : Fragment() {

    private lateinit var binding:FragmentAlcoholBinding

    private val viewModel: TestViewModel by viewModels()

  
    private var dataBody:ReceiveDataBody? = null

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentTestBinding.inflate(inflater, container, false)
        initClick()
        initContent()
        return binding.root
    }
}

只有在fragment 或者Activity中添加@AndroidEntryPoint,才能使用@HiltModule的注解的类
通过Hilt可以帮助开发者极大的提高开发效率,降低耦合,减少冗余代码。
这是才项目章使用的Hilt的一点心得,与诸位贡献,希望能帮助到你

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容