android - Hilt - 如何将依赖项注入(inject)适配器?

标签 android dagger-hilt

我在模块中提供依赖:

@Provides
@Singleton
fun provideImageUtil(@ImageUrl imageUrl: String): ImageUtil = GlideImageUtil(imageUrl)
我正在尝试将其注入(inject) RecyclerView 适配器:
class MainAdapter(private val goods: ArrayList<GoodItem>) : RecyclerView.Adapter<MainAdapter.DataViewHolder>() {

    @Inject
    lateinit private var imageUtil: ImageUtil
我曾经使用 Dagger 以这种方式注入(inject):
object Injector {

    lateinit var appComponent: AppComponent

    fun initAppComponent(context: Context){

        if(context is Activity){
            throw IllegalStateException("pass an Application as an argument to avoid memory leaks")
        }

        appComponent = DaggerAppComponent.builder()
                .appModule(AppModule(context))
                .build()

    }

}
在适配器中:
init {
    Injector.appComponent.inject(this)
}
如何使用 Hilt 将依赖项注入(inject)适配器?据我所知,“appComponent”是由 Hilt 生成的。我怎样才能访问它?

最佳答案

首先在您的自定义类中创建入口点

@EntryPoint
@InstallIn(SingletonComponent::class)
interface MyEntryPoint {
    fun getImageUtil(): ImageUtil
}
它是与@EntryPoint 的简单界面注解。由于您的依赖项 (ImageUtil) 是单例的,您应该使用 @InstallIn(SingletonComponent::class)声明组件的注释。最后声明一个方法来获取你的依赖fun getImageUtil(): ImageUtil您可以在适配器的 init block 中获取依赖项
init {
    val myEntryPoint = EntryPointAccessors.fromApplication(context, MyEntryPoint::class.java)
    imageUtil = myEntryPoint.getImageUtil()
}
完整代码
class MainAdapter(
    context: Context,
    private val goods: ArrayList<GoodItem>
) : RecyclerView.Adapter<MainAdapter.DataViewHolder>() {

    var imageUtil: ImageUtil

    @EntryPoint
    @InstallIn(SingletonComponent::class)
    interface MyEntryPoint {
        fun getImageUtil(): ImageUtil
    }

    init {
        val myEntryPoint = EntryPointAccessors.fromApplication(context, MyEntryPoint::class.java)
        imageUtil = myEntryPoint.getImageUtil()
    }
}
另见 https://developer.android.com/training/dependency-injection/hilt-android#not-supported

关于android - Hilt - 如何将依赖项注入(inject)适配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67394870/

相关文章:

android - 带有 TextInputLayouts passwordToggleEnabled 的可见密码

android - @InstallIn,只能和@DefineComponent注解的类一起使用,但是发现: [com. abc.xyz.AppClass]

android - 使用 HILT 注入(inject)抽象类(基本 Activity )

android - Google Play 控制台中的 Dagger Hilt 崩溃

android - getLastKnownLocation 返回 Null 值

java - 如何禁用按钮并清除数组列表?

带有 Dagger Hilt 的 Android 动态功能模块

Android Hilt - 多模块项目转换错误

安卓缓存处理

android - 如何在cardview上设置彩色边框