Hilt编译报错:无@Provides注解方法无法提供Mammals的解决咨询
解决Hilt依赖注入编译错误的方案
核心问题分析
编译报错Mammals cannot be provided without an @Provides-annotated method.的根源是:
- ViewModel中声明的
mammals类型错误地写成了限定符注解@Mammals,而非实际要注入的String类型;fish同理,类型写成了限定符注解@Fish。 - Hilt无法识别注解作为依赖类型,自然找不到对应的提供方法。
具体修复步骤
修正注入变量的类型
将ViewModel中mammals和fish的类型从注解改为String,同时保留限定符注解:@HiltViewModel class AnimalsViewModel @Inject constructor(private val animalRepository: AnimalRepository) : ViewModel() { @Mammals @Inject lateinit var mammals: String // 把Mammals改成String @Fish @Inject lateinit var fish: String // 把Fish改成String fun getListOfAnimals(): List<String> { // 注释或修复未定义的rescue变量 // val orgs = rescue.getOrganization() var m = "type = " + mammals var f = "fish = " + fish return animalRepository.getAnimals() } }(可选)改用构造函数注入更规范
Hilt推荐构造函数注入而非字段注入,可调整ViewModel的注入方式:@HiltViewModel class AnimalsViewModel @Inject constructor( private val animalRepository: AnimalRepository, @Mammals private val mammals: String, @Fish private val fish: String ) : ViewModel() { fun getListOfAnimals(): List<String> { var m = "type = " + mammals var f = "fish = " + fish return animalRepository.getAnimals() } }修复未定义变量
代码中rescue.getOrganization()的rescue变量未声明,需补充定义或注释掉该行,避免后续运行错误。
验证修复
修改后重新编译,Hilt会正确识别带@Mammals和@Fish限定符的String依赖,从AnimalsModule中获取对应的实例。
内容的提问来源于stack exchange,提问作者Johann
相关产品推荐
相关产品推荐

