jetpack 中的 Hiltviewmodel 与 AssistedInject 组合出现多个错误

问题描述 投票:0回答:1

我的应用程序中有一个 viewModel,它获取一些运行时参数(我们称之为

someId
)。当我搜索时,我发现了
AssistedInject
功能并将我的 Hilt 更新到版本
1.2.0

现在这是我尝试实现此功能的方法:

  1. 我的第一次尝试:

在我的

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.
  1. 为了修复错误,我做了以下更改:

在我的

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.
  1. 在我的第三次尝试中,我做了这些更改:

在我的

MyViewModel.kt

@HiltViewModel
class MyViewModel @Inject constructor(
    @Assisted val someId: Int?,
) : ViewModel() {
...
}

我也遇到同样的错误。

  1. 因此,因为这是有道理的,我在第四次尝试时进行了这些更改:
@HiltViewModel
class MyViewModel @AssistedInject constructor(
    @Assisted val someId: Int?,
) : ViewModel() {
...
}

我再次遇到与 #1 相同的错误:

[Hilt] ViewModel constructor should be annotated with @Inject instead of @AssistedInject.

所以,我已经不知道如何解决问题以及可能导致问题的原因了。

附注我已经在每次构建之间清理了项目,以便确保没有旧生成的代码残留,并且所有 DI 都会重新生成。

kotlin android-jetpack-compose dagger-hilt assisted-inject
1个回答
0
投票

您需要将hilt更新到2.49或更新版本:

修复了 #2287、#3523:添加对将 @AssistedInject 与 @HiltViewModel 一起使用的支持。 (8327177)。 有关更多详细信息,请访问 https://dagger.dev/hilt/view-model#assistance-injection

© www.soinside.com 2019 - 2024. All rights reserved.