使用Hilt完成依赖注入,让你的安卓代码层次有几层楼那么高(二)下

简介: 使用Hilt完成依赖注入,让你的安卓代码层次有几层楼那么高(二)

一个类,多种注入方式


  上述的多种注入方式都存在一个问题,我们只能对一个类注入一种实例,例如OkHttpClient只能存在一种,但是实际项目中可能存在多套Client,亦或者是更常见的String,我们总不能只能注入一个String对象吧,因此我们需要告诉Hilt如何区分它们。


方法一:使用Named注解


非常的简单,只需要在Provides方式的容器的方法中增加一个注解Named,然后写上独一无二的Tag,在使用端同时加上对应的Tag,这样Hilt注入的时候就会选择对应的注入方式,为同一个类型提供多种绑定。


@AndroidEntryPoint
class ExampleActivity:AppCompatActivity() {
    @Inject
    @Named("One")
    lateinit var oneString:String
    @Inject
    @Named("Two")
    lateinit var twoString:String
}
@Module
@InstallIn(ActivityComponent::class)
object StringModule{
    @Provides
    @Named("One")
    fun providesOneString():String{
        return "One"
    }
    @Provides
    @Named("Two")
    fun providesTwoString():String{
        return "Two"
    }
}

注入接口也是同样的道理,在对应的binds方法中添加Named注解即可,你可以自己动手试试


方法二:自定义注解


首先笔者说下自己的态度,笔者并不喜欢第一种方式是因为Named注解里面的值只能硬编码,由于注解的特性并不能传入一个静态的String,因此容易写错或者后期重构容易遗漏修改导致出现注入失败,因此笔者更喜欢这种方式。

首先根据你需要的分类定义相应的注解,注解都添加@Qualifier(告诉Hilt这个注解是分类器)


@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class OneString
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class TwoString
其他的部分和Named差不多
kotlin
复制代码
@AndroidEntryPoint
class ExampleActivity:AppCompatActivity() {
    @Inject
    @OneString
    lateinit var oneString:String
    @Inject
    @TwoString
    lateinit var twoString:String
}
@Module
@InstallIn(ActivityComponent::class)
object StringModule{
    @Provides
    @OneString
    fun providesOneString():String{
        return "One"
    }
    @Provides
    @TwoString
    fun providesTwoString():String{
        return "Two"
    }
}

好了,这篇文章到这里就结束了,下一期我们继续探讨一下Hilt的容器生命周期和容器作用域相关的话题,特别是如何让注入的对象单例化。


相关文章
|
2月前
|
编译器 Android开发 开发者
带你了解Android Jetpack库中的依赖注入框架:Hilt
本文介绍了Hilt,这是Google为Android开发的依赖注入框架,基于Dagger构建,旨在简化依赖注入过程。Hilt通过自动化的组件和注解减少了DI的样板代码,提高了应用的可测试性和可维护性。文章详细讲解了Hilt的主要概念、基本用法及原理,帮助开发者更好地理解和应用Hilt。
77 8
|
6月前
|
XML API Android开发
【Android 从入门到出门】第三章:使用Hilt处理Jetpack Compose UI状态
【Android 从入门到出门】第三章:使用Hilt处理Jetpack Compose UI状态
83 4
|
Java 数据库 Android开发
使用Hilt完成依赖注入,让你的安卓代码层次有几层楼那么高(三)
使用Hilt完成依赖注入,让你的安卓代码层次有几层楼那么高(三)
209 0
|
缓存 API 调度
Android OkHttp+Retrofit+Rxjava+Hilt实现网络请求框架
🔥 介绍 本文通过OkHttp+Retrofit+Rxjava+Hilt实现一个网络请求框。
764 0
Android OkHttp+Retrofit+Rxjava+Hilt实现网络请求框架
|
Android开发
使用Hilt完成依赖注入,让你的安卓代码层次有几层楼那么高(四)
使用Hilt完成依赖注入,让你的安卓代码层次有几层楼那么高(四)
225 0
|
Android开发 容器
使用Hilt完成依赖注入,让你的安卓代码层次有几层楼那么高(二)上
使用Hilt完成依赖注入,让你的安卓代码层次有几层楼那么高(二)
119 0
|
Android开发 容器
使用Hilt完成依赖注入,让你的安卓代码层次有几层楼那么高(一)下
使用Hilt完成依赖注入,让你的安卓代码层次有几层楼那么高(一)
145 0
|
程序员 Android开发 容器
使用Hilt完成依赖注入,让你的安卓代码层次有几层楼那么高(一)上
使用Hilt完成依赖注入,让你的安卓代码层次有几层楼那么高(一)
90 0
|
测试技术 数据库 Android开发
Android Jetpack 浅析Hilt依赖注入
首先,某个类的成员变量称为依赖,如若此变量想要实例化引用其类的方法,可以通过构造函数传参或者通过某个方法获取对象,此等通过外部方法获取对象实例的称为依赖注入;而依赖注入又可以简单分为`手动注入`和`自动注入`两种方式;`Hilt`就是基于Dagger进行`场景化优化`的一个依赖注入库,Hilt是Google专门为Android平台打造的一个依赖注入库,在使用上极大程度进行啦简化(与dagger相比)
406 1