超级Fragment或ViewModel中的Hilt字段注入
我在我的 Android 项目中使用 Dagger-Hilt 进行依赖注入,现在我遇到了这种情况,我有一个基本的抽象 Fragment
基础视图模型.kt
abstract class BaseViewModel constructor(
val api: FakeApi,
) : ViewModel() {
//...
}
在这里,我有一个依赖项是FakeApi. 我想要做的就是注入FakeApi到BaseViewModel要在现有的BaseViewModel和所有的孩子。
- 我尝试的第一种方法是使用构造函数注入并将其注入子进程并使用构造函数将其传递给超级进程。
任务视图模型.kt
@HiltViewModel
class TaskViewModel @Inject constructor(
api: FakeApi
) : BaseViewModel(api){
}
这种方法工作正常,但我不需要将依赖从类传递child给super类,我需要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?