首页 > 解决方案 > android hilt注入ViewModel

问题描述

我正在尝试向 MyViewModel 注入一个模块

这是我的模块

@Module
@InstallIn(ViewModelComponent::class)
object EngineModule {
    @Provides
    fun getEngine(): String = "F35 Engine"
}

这是我的视图模型

@HiltViewModel
class MyViewModel @Inject constructor(): ViewModel() {
    @Inject lateinit var getEngine: String

    fun getEngineNameFromViewModel(): String = getEngineName()
}

它抛出

kotlin.UninitializedPropertyAccessException:lateinit 属性 getEngine 尚未初始化

但是,如果我像这样更改ViewModelComponent::classActivityComponent::class注入

@AndroidEntryPoint
class MainActivity : ComponentActivity() {

    @Inject
    lateinit var getEngine: String

它完美无缺

知道如何注入视图模型吗?

标签: androidandroid-viewmodeldagger-hilt

解决方案


由于将在ViewModel的构造函数中注入所需的依赖项,因此您只需按以下方式修改代码即可使其工作:

@HiltViewModel 
class MyViewModel @Inject constructor(private val engineName: String): ViewModel() {

    fun getEngineNameFromViewModel(): String = engineName

}

推荐阅读