我的应用程序中有一个 viewModel,它获取一些运行时参数(我们称之为
someId
)。当我搜索时,我发现了 AssistedInject
功能并将我的 Hilt 更新到版本 1.2.0
。
现在这是我尝试实现此功能的方法:
在我的
MyViewModel.kt
我有:
@HiltViewModel(assistedFactory = MyViewModelFactory::class)
class MyViewModel @AssistedInject constructor(
@Assisted val someId: Int?
) : ViewModel() {
...
}
@AssistedFactory
interface MyViewModelFactory {
fun create(someId: Int?): MyViewModel
}
在我的
composable
中我有:
val viewModel : MyViewModel = hiltViewModel<MyViewModel, MyViewModelFactory>{factory ->
factory.create(myIdVariable)
}
结果是,当我构建应用程序时,出现错误:
[Hilt] ViewModel constructor should be annotated with @Inject instead of @AssistedInject.
在我的
MyViewModel.kt
我有:
@HiltViewModel(assistedFactory = MyViewModelFactory::class)
class MyViewModel @Inject constructor(
@Assisted val someId: Int?
) : ViewModel() {
...
}
当我构建应用程序时,我收到此错误:
在生成的
MyViewModelFactory
上:
An assisted factory's abstract method must return a type with an @AssistedInject-annotated constructor.
在我的
MyViewModel.kt
:
@HiltViewModel
class MyViewModel @Inject constructor(
@Assisted val someId: Int?,
) : ViewModel() {
...
}
我也遇到同样的错误。
@HiltViewModel
class MyViewModel @AssistedInject constructor(
@Assisted val someId: Int?,
) : ViewModel() {
...
}
我再次遇到与 #1 相同的错误:
[Hilt] ViewModel constructor should be annotated with @Inject instead of @AssistedInject.
所以,我已经不知道如何解决问题以及可能导致问题的原因了。
附注我已经在每次构建之间清理了项目,以便确保没有旧生成的代码残留,并且所有 DI 都会重新生成。
您需要将hilt更新到2.49或更新版本:
修复了 #2287、#3523:添加对将 @AssistedInject 与 @HiltViewModel 一起使用的支持。 (8327177)。 有关更多详细信息,请访问 https://dagger.dev/hilt/view-model#assistance-injection。