超级Fragment或ViewModel中的Hilt字段注入

我在我的 Android 项目中使用 Dagger-Hilt 进行依赖注入,现在我遇到了这种情况,我有一个基本的抽象 Fragment

基础视图模型.kt

abstract class BaseViewModel constructor(
    val api: FakeApi,
) : ViewModel() {
    
    //...
    
}

在这里,我有一个依赖项是FakeApi. 我想要做的就是注入FakeApiBaseViewModel要在现有的BaseViewModel和所有的孩子。

  • 我尝试的第一种方法是使用构造函数注入并将其注入子进程并使用构造函数将其传递给超级进程。

任务视图模型.kt

@HiltViewModel
class TaskViewModel @Inject constructor(
    api: FakeApi
) : BaseViewModel(api){

}

这种方法工作正常,但我不需要将依赖从类传递childsuper类,我需要FakeApi将 自动注入到 中BaseViewModel而不必传递它,因为我有三个抽象级别(还有另一个类继承自TaskViewModel) 所以我必须通过它两次。

  • 第二种方法是使用场注入如下

基础视图模型.kt

abstract class BaseViewModel: ViewModel() {
    @Inject
    lateinit var api: FakeApi
    //...
}

任务视图模型.kt

@HiltViewModel
class TaskViewModel @Inject constructor(): BaseViewModel() {
    
}

这种方法对我不起作用,FakeApi没有注入,我有一个Exception

kotlin.UninitializedPropertyAccessException: lateinit property api has not been initialized

我的问题是

  • 为什么场注入对我不起作用?
  • 有没有办法对类使用构造函数注入super而不是从child?
以上是超级Fragment或ViewModel中的Hilt字段注入的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>