安卓+Kotlin+刀柄:注入到对象类

ulydmbyx  于 2023-02-24  发布在  Kotlin
关注(0)|答案(1)|浏览(128)

我将重点讨论注入Context,但我的问题适用于任何依赖关系,如存储库或服务类。
我有一个目的如下:

object MyObject {

    lateinit var appContext: Context

    doWhatever(appContext: Context){ => This is where I need context
    }

    fun myMethod() {
        val baseClass = BaseClass()
        doWhatever(appContext)
    }
}

我已经知道Hilt不能注入到对象中,但是它可以注入到类中,所以我正在尝试下一种方法。

object MyObject : ProviderClass() {

    doWhatever(appContext: Context){
    }

    fun myMethod() {
        val baseClass = BaseClass()
        doWhatever(appContext)
    }
}

abstract class ProviderClass {

    @Inject
    lateinit var appContext: Context
}

如您所见,我尝试将字段注入ProviderClass并通过继承使字段可用,但也失败了,原因是**“lateinit var appContext尚未初始化”**。
这就是我提供依赖项的地方:

@Module
@InstallIn(SingletonComponent::class)
object Dependencies {

    @Singleton
    @Provides
    fun provideContext(@ApplicationContext appContext: Context): Context {
        return appContext
    }
}

出了什么问题?我怎样才能把依赖注入到一个对象中呢?

gblwokeq

gblwokeq1#

无法将依赖项注入到Object

@EntryPoint
@InstallIn(SingletonComponent::class)
interface SomeInterface{
    val dep: YourDependecyClass
}

那么你可以像这样访问,但是为此你需要上下文,这对于不支持HILT直接注入注入的地方,但是你可以访问上下文

val x:SomeInterface = EntryPointAccessors.fromApplication(applicationContext, SomeInterface::class.java)

相关问题