Hilt Android 能否在不同的活动中允许视图模型的不同实例?
Can Hilt Android allow different instances of a viewmodel in different activites?
当使用 Hilt 在两个不同的活动中使用相同的视图模型 class 时,视图模型的参数会抛出错误“存在匹配键的绑定”。
@HiltViewModel
class ViewmodelA @Inject constructor(val paramA :TypeA)
{ //some other code }
以上是视图模型的片段 class。
此视图模型正在其他两个活动中重复使用。
在第二个 activity 的 paramA 编译期间抛出错误,提示“存在与匹配键的绑定”。
这在 dagger2 中使用视图模型工厂是可能的。不过 Hilt 似乎对此并不满意。
使用的 Hilt 版本:2.37
有人可以帮忙吗? / 对此有任何解决方法吗?
确切的错误是这样的:
error: [Dagger/MissingBinding] (package_name).TypeA cannot be provided without an @Inject constructor or an @Provides-annotated method.
public abstract static class SingletonC implements (AppName)_GeneratedInjector,
A binding with matching key exists in component: (package_name)_HiltComponents.ViewModelC
(package_name).TypeA is injected at
(package_name). ViewmodelA(…, paramA, …)
(package_name).ViewmodelA is injected at
(package_name of another_Activity).viewModel
(package_name of another_activity) is injected at……………..
您正在尝试将 ViewmodelA
直接注入第二个 activity。这是 @HiltViewModel
classes 的错误,因为 Android Jetpack ViewModels 应该通过 ViewModelProvider
.
访问
// don't do this
@Inject
lateinit var viewModel: ViewmodelA
// do this instead
val viewModel: ViewmodelA by viewModels()
您通常会收到一条错误消息,告诉您不要直接注入 HiltViewModel
class。但是,在这种情况下,TypeA
仅在 ViewModelComponent
中提供,而您正试图在 ActivityComponent
中创建 ViewmodelA
的实例。在 ActivityComponent
中无法满足您的视图模型的依赖关系,因此 Dagger 首先会抛出一个错误。
当使用 Hilt 在两个不同的活动中使用相同的视图模型 class 时,视图模型的参数会抛出错误“存在匹配键的绑定”。
@HiltViewModel
class ViewmodelA @Inject constructor(val paramA :TypeA)
{ //some other code }
以上是视图模型的片段 class。
此视图模型正在其他两个活动中重复使用。
在第二个 activity 的 paramA 编译期间抛出错误,提示“存在与匹配键的绑定”。
这在 dagger2 中使用视图模型工厂是可能的。不过 Hilt 似乎对此并不满意。
使用的 Hilt 版本:2.37
有人可以帮忙吗? / 对此有任何解决方法吗?
确切的错误是这样的:
error: [Dagger/MissingBinding] (package_name).TypeA cannot be provided without an @Inject constructor or an @Provides-annotated method.
public abstract static class SingletonC implements (AppName)_GeneratedInjector,
A binding with matching key exists in component: (package_name)_HiltComponents.ViewModelC
(package_name).TypeA is injected at
(package_name). ViewmodelA(…, paramA, …)
(package_name).ViewmodelA is injected at
(package_name of another_Activity).viewModel
(package_name of another_activity) is injected at……………..
您正在尝试将 ViewmodelA
直接注入第二个 activity。这是 @HiltViewModel
classes 的错误,因为 Android Jetpack ViewModels 应该通过 ViewModelProvider
.
// don't do this
@Inject
lateinit var viewModel: ViewmodelA
// do this instead
val viewModel: ViewmodelA by viewModels()
您通常会收到一条错误消息,告诉您不要直接注入 HiltViewModel
class。但是,在这种情况下,TypeA
仅在 ViewModelComponent
中提供,而您正试图在 ActivityComponent
中创建 ViewmodelA
的实例。在 ActivityComponent
中无法满足您的视图模型的依赖关系,因此 Dagger 首先会抛出一个错误。