You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose中Hilt ViewModel结合AssistedInject报错求助

解决Hilt ViewModel AssistedInject构建错误的方案

1. 确保依赖配置正确

先检查Gradle依赖,确保包含Hilt核心、AssistedInject及Hilt Compose导航的依赖(版本保持一致,建议用最新稳定版):

// Hilt核心
implementation "com.google.dagger:hilt-android:2.48"
kapt "com.google.dagger:hilt-android-compiler:2.48"

// AssistedInject依赖
implementation "com.google.dagger:assisted-inject:2.48"
kapt "com.google.dagger:assisted-inject-compiler:2.48"

// Hilt Compose导航(适配Compose场景)
implementation "androidx.hilt:hilt-navigation-compose:1.1.0"

2. 正确编写ViewModel与AssistedFactory

ViewModel需用@HiltViewModel注解,构造函数标记@Inject,运行时参数用@Assisted注解;同时在ViewModel内部定义@AssistedFactory接口,并提供ViewModelProvider.Factory的包装方法:

@HiltViewModel
class MyViewModel @Inject constructor(
    @Assisted val someId: Int?
) : ViewModel() {
    // 业务逻辑实现...

    // 定义AssistedFactory接口
    @AssistedFactory
    interface Factory {
        fun create(someId: Int?): MyViewModel
    }

    // 包装成ViewModelProvider.Factory供Composable调用
    companion object {
        fun provideFactory(
            factory: Factory,
            someId: Int?
        ): ViewModelProvider.Factory = object : ViewModelProvider.Factory {
            @Suppress("UNCHECKED_CAST")
            override fun <T : ViewModel> create(modelClass: Class<T>): T {
                return factory.create(someId) as T
            }
        }
    }
}

3. 在Composable中正确获取ViewModel

使用hiltViewModel的重载方法,传入lambda将AssistedFactory转换为ViewModelProvider.Factory:

val viewModel: MyViewModel = hiltViewModel { factory ->
    MyViewModel.provideFactory(factory as MyViewModel.Factory, myIdVariable)
}

错误原因分析

你之前的尝试存在核心问题:

  • 第一次/第四次错误:@HiltViewModel注解的ViewModel构造函数必须用@Inject,不能用@AssistedInject,后者仅适用于普通类的辅助注入场景。
  • 第二次/第三次错误:AssistedFactory需要绑定到ViewModel的@Inject构造函数中的@Assisted参数,但你缺少将Factory包装为ViewModelProvider.Factory的关键步骤,且可能存在依赖配置缺失(比如未添加AssistedInject的编译器依赖)。

内容的提问来源于stack exchange,提问作者Arman TabibZadeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 22:45:54