用了一周才搞明白Dagger/Hilt中的辅助注入,真正写起来其实很简单

本文详细介绍了Dagger/Hilt的辅助注入,解释了其概念、使用场景和历史演变。通过逐步指导,展示了如何进行普通类和ViewModel的辅助注入,包括多个参数的处理。同时,分享了在学习过程中遇到的问题和解决方案,为读者提供了一个清晰的实践指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是辅助注入

介绍辅助注入

辅助注入,如字面意思,就是辅助的依赖注入。这个辅助,其实是由开发者,也就是我们来辅助Hilt来进行依赖注入。当然这么看起来也是很懵,看一下下面的使用场景介绍应该就能懂个大概了。

辅助注入的使用场景

而辅助注入的使用场景呢?

我们都知道,依赖注入框架可以帮助我们创建实例对象。不过在使用Hilt(或者Dagger,作为一个Android开发,我在下文中都会称为Hilt)这个框架之前,我一直有一个困惑,那就是Hilt是怎么给我创建实例的。

别的时候都还好说,如果创建实例时,需要传入一个可变的var的参数。比如我要创建一个花的对象,需要在创建时就传入一个花的名字:

var name:String = "Rose"
val flower:Flower = FLower(name)

而交给Hilt要怎么创建呢?毕竟参数是可变的,Hilt怎么知道这个参数是什么呢?

@Inject
latinit var flower:Flower

在这里插入图片描述
这个时候就需要用到辅助注入了。

所以辅助注入的使用场景可以概括为:

  • 创建实例对象需要参数
  • 参数是可变的(不一定是var修饰的,val也可以,主要是想说这个参数不是固定的不变的,否则就能通过@Provide来创建了)

至于其他场景,比如不需要参数啊,参数是静态不变的,又可以根据不同的类型进行不同的处理,这里就不再赘述,可以看一下我的文章:

辅助注入的发展

辅助注入也经历过时代的发展,在Dagger的早期版本中,是通过@AutoFactory的形式进行辅助注入的。而在Dagger 2.31+版本之后,则是用@AssistedInject。对于Hilt也是一样,使用前一定要检查自己的依赖版本是否支持最新的Assisted Injection。

如何进行辅助注入

准备工作

和其他方式的依赖注入一样,准备工作分为两步。

导入依赖库

implementation "com.google.dagger:hilt-android:2.37"
kapt "com.google.dagger:hilt-android-compiler:2.37"

配置Application

@HiltAndroidApp
class MyApplication : Application()

记得把自定义的Application在Manifest配置一下。

普通类的辅助注入

定义一个带参数的类

在完成准备工作后,我们要先创建一个需要辅助注入的类,这个类的构造方法中包含一个String的参数

class ImageLoader @AssistedInject constructor(
    @Assisted
    private val imgUrlString: String
) {
   

    override 
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值