Hilt - 如何在执行注入对象方法"init"块中运行代码



我正在尝试将Hilt集成到我现有的Android应用程序中。我遇到了一个问题,我在";init";Kotlin类区块。以下是演示该问题的示例代码:

interface ITest1 {
fun doSomething()
}
interface ITest2 {
fun doSomethingElse()
}
class Test1 @Inject constructor(): ITest1 {
override fun doSomething() {
println("Something")
}
}

class Test2 @Inject constructor(): ITest2 {
@Inject
lateinit var test1: ITest1
override fun doSomethingElse() {
println("Something else ")
}
init {
test1.doSomething()
}
}
@Module
@InstallIn(SingletonComponent::class)
object Dependencies {
@Singleton
@Provides
fun provideTest1(test1: Test1): ITest1 {
return test1
}
@Singleton
@Provides
fun provideTest2(test2: Test2): ITest2 {
return test2
}
}

此代码崩溃:Caused by: kotlin.UninitializedPropertyAccessException: lateinit property test1 has not been initialized

正如我读到的关于希尔特/达格的文章;test1";将在init/构造函数执行后注入。

我找到了一个解决方法——我可以定义自己的init方法,并在构造";test2";,但我想知道有没有更优雅的方法可以做到这一点?

您可以通过构造函数传递它。所以你的Test2会变成:

class Test2 @Inject constructor(val test1: ITest1): ITest2

最新更新