android 将 hilt 注入 ViewModel
android hilt Inject into ViewModel
我正在尝试向 MyViewModel 注入一个模块
这是我的模块
@Module
@InstallIn(ViewModelComponent::class)
object EngineModule {
@Provides
fun getEngine(): String = "F35 Engine"
}
这是我的 viewModel
@HiltViewModel
class MyViewModel @Inject constructor(): ViewModel() {
@Inject lateinit var getEngine: String
fun getEngineNameFromViewModel(): String = getEngineName()
}
它抛出
kotlin.UninitializedPropertyAccessException: lateinit property getEngine
has not been initialized
但是,如果我将 ViewModelComponent::class
更改为 ActivityComponent::class
并像这样注入
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@Inject
lateinit var getEngine: String
完美运行
知道如何注入 viewModel 吗?
由于所需的依赖项将被注入到ViewModel
的构造函数中,您只需按以下方式修改代码即可使其工作:
@HiltViewModel
class MyViewModel @Inject constructor(private val engineName: String): ViewModel() {
fun getEngineNameFromViewModel(): String = engineName
}
您也可以删除 @Inject constructor
,因为您已经使用匕首模块提供了依赖项:
@HiltViewModel
class MyViewModel (private val engineName: String): ViewModel() {
fun getEngineNameFromViewModel(): String = engineName
}
因此,基本上您可以使用匕首模块或构造函数注入来提供依赖项。
我正在尝试向 MyViewModel 注入一个模块
这是我的模块
@Module
@InstallIn(ViewModelComponent::class)
object EngineModule {
@Provides
fun getEngine(): String = "F35 Engine"
}
这是我的 viewModel
@HiltViewModel
class MyViewModel @Inject constructor(): ViewModel() {
@Inject lateinit var getEngine: String
fun getEngineNameFromViewModel(): String = getEngineName()
}
它抛出
kotlin.UninitializedPropertyAccessException: lateinit property getEngine has not been initialized
但是,如果我将 ViewModelComponent::class
更改为 ActivityComponent::class
并像这样注入
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@Inject
lateinit var getEngine: String
完美运行
知道如何注入 viewModel 吗?
由于所需的依赖项将被注入到ViewModel
的构造函数中,您只需按以下方式修改代码即可使其工作:
@HiltViewModel
class MyViewModel @Inject constructor(private val engineName: String): ViewModel() {
fun getEngineNameFromViewModel(): String = engineName
}
您也可以删除 @Inject constructor
,因为您已经使用匕首模块提供了依赖项:
@HiltViewModel
class MyViewModel (private val engineName: String): ViewModel() {
fun getEngineNameFromViewModel(): String = engineName
}
因此,基本上您可以使用匕首模块或构造函数注入来提供依赖项。