使用Dagger Hilt初始化带参ViewModel失败问题求助
Dagger Hilt ViewModel实例化失败解决方案
给ViewModel添加
@HiltViewModel注解
这是Hilt识别ViewModel并处理构造函数注入的必要条件,你的RegisterViewModel必须加上该注解,示例代码:@HiltViewModel class RegisterViewModel @Inject constructor( private val registerRepository: RegisterRepository, private val dataStoreManager: DataStoreManager ) : ViewModel() { // 业务逻辑代码 }给宿主Activity添加
@AndroidEntryPoint注解
初始化ViewModel的RegisterActivity必须标注该注解,否则Hilt无法在Activity层级注入依赖,示例:@AndroidEntryPoint class RegisterActivity : AppCompatActivity() { private val viewModel by viewModels<RegisterViewModel>() // 页面逻辑代码 }检查DataStoreManager的依赖配置
你已经配置了RegisterRepository的提供,但DataStoreManager可能缺少对应的Hilt Module配置。需要在Module中添加它的@Provides方法,比如:@Module @InstallIn(SingletonComponent::class) object DataStoreModule { @Provides fun provideDataStoreManager(@ApplicationContext context: Context): DataStoreManager { return DataStoreManager(context) } }确保DataStoreManager的构造函数参数(比如Context)能被Hilt正确提供。
验证依赖作用域匹配
检查RegisterRepository和DataStoreManager的作用域(比如@Singleton)是否和ViewModel的生命周期兼容,避免出现作用域不匹配导致的无法获取实例问题。清理缓存并重新构建项目
Hilt注解处理器生成的代码可能存在缓存问题,执行Build -> Clean Project后再Build -> Rebuild Project,或者通过Gradle命令./gradlew clean compileDebugSources重新生成代码。
内容的提问来源于stack exchange,提问作者Pooran Kharol
相关产品推荐
相关产品推荐

