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

什么是辅助注入

介绍辅助注入

辅助注入,如字面意思,就是辅助的依赖注入。这个辅助,其实是由开发者,也就是我们来辅助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 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Hilt 是一个用于简化依赖注入的框架,可以在 Android 应用程序使用它来管理和注入依赖项。下面是使用 Hilt 进行依赖注入的一个简单示例应用: 1. 添加 Hilt 相关依赖到项目。在项目的根目录的 `build.gradle` 文件添加 Hilt Gradle 插件的依赖: ```groovy buildscript { repositories { ... } dependencies { ... classpath 'com.google.dagger:hilt-android-gradle-plugin:<version>' } } ``` 在应用模块的 `build.gradle` 文件应用 Hilt 插件,并添加 Hilt 相关依赖: ```groovy apply plugin: 'kotlin-kapt' apply plugin: 'dagger.hilt.android.plugin' android { ... } dependencies { implementation 'com.google.dagger:hilt-android:<version>' kapt 'com.google.dagger:hilt-android-compiler:<version>' ... } ``` 2. 在 Application 类上添加 `@HiltAndroidApp` 注解,将其标记为 Hilt 应用程序: ```kotlin import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp class MyApp : Application() { // Application 的实现代码... } ``` 3. 创建一个需要依赖注入的类,例如 UserRepository: ```kotlin import javax.inject.Inject class UserRepository @Inject constructor() { // UserRepository 的实现代码... } ``` 4. 在需要进行依赖注入的类,使用 `@Inject` 注解来标记需要注入的依赖项。例如,在 MainActivity : ```kotlin import javax.inject.Inject @AndroidEntryPoint class MainActivity : AppCompatActivity() { @Inject lateinit var userRepository: UserRepository // Activity 的实现代码... } ``` 通过以上步骤,Hilt 会自动管理依赖项的创建和注入。在 MainActivity ,`userRepository` 字段将会被自动注入一个 UserRepository 实例。 需要注意的是,使用 Hilt 进行依赖注入需要在 Android Studio 启用 kapt 插件。 这只是一个简单的示例,Hilt 可以在更复杂的应用程序提供更多的依赖注入功能和灵活性。 希望对你有所帮助!如果还有其他问题,请随时提问。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值