使用Retrofit、Dagger Hilt与Repository模式获取API数据遇依赖问题求助
问题分析与解决方案
核心问题定位
从错误信息来看,核心问题是Dagger Hilt的Singleton注解包冲突——你的代码中混用了jakarta.inject.Singleton和Hilt默认依赖的javax.inject.Singleton,导致依赖注入容器无法正确识别注解规则,进而无法完成CryptoRepository的注入。
具体修复步骤
1. 统一Singleton注解的导入
检查NetworkModule、RepositoryModule所有使用@Singleton的文件,确保导入的是javax.inject.Singleton,而非jakarta.inject.Singleton:
// 正确导入语句,替换掉jakarta相关的导入 import javax.inject.Singleton
2. 确认Application类的Hilt初始化配置
必须在自定义Application类上添加@HiltAndroidApp注解,这是Hilt启动依赖注入容器的核心入口:
@HiltAndroidApp class CryptoApp : Application() { // 无需额外逻辑,Hilt会自动完成初始化 }
同时在AndroidManifest.xml中指定这个Application类:
<application android:name=".CryptoApp" <!-- 其他原有配置 --> >
3. 检查依赖库版本兼容性
确保项目中Hilt、Retrofit等核心依赖版本匹配,避免因版本差异导致的注解包冲突。推荐的依赖配置示例(模块级build.gradle):
plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'kotlin-kapt' id 'com.google.dagger.hilt.android' } dependencies { // Hilt核心依赖 implementation 'com.google.dagger:hilt-android:2.48' kapt 'com.google.dagger:hilt-android-compiler:2.48' // Retrofit相关 implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.11.0' }
注意:不要主动引入jakarta.inject相关依赖,Android环境下Hilt默认依赖javax.inject。
4. 优化Repository注入方式(可选)
你当前的RepositoryModule写法可行,但可以改用@Binds注解简化代码,无需手动实例化实现类:
@Module @InstallIn(SingletonComponent::class) abstract class RepositoryModule { @Binds @Singleton abstract fun bindCryptoRepository(impl: CryptoRepositoryImpl): CryptoRepository }
这种方式更符合Hilt的最佳实践,由Hilt自动处理依赖注入逻辑。
5. 清理缓存并重构项目
执行以下操作确保旧缓存被清除:
- 点击Android Studio顶部菜单
Build > Clean Project - 接着执行
Build > Rebuild Project - 若仍有问题,执行
File > Invalidate Caches... > Invalidate and Restart
验证注入有效性
在需要注入CryptoRepository的ViewModel中,确保添加@HiltViewModel注解:
@HiltViewModel class CryptoViewModel @Inject constructor( private val repository: CryptoRepository ) : ViewModel() { fun loadCoins() { viewModelScope.launch { val coins = repository.getCoins() // 数据处理逻辑 } } }
内容的提问来源于stack exchange,提问作者Muhammet Sarisoy
相关产品推荐
相关产品推荐

