多模块项目中Hilt注入FirebaseFirestore遇Dagger/MissingBinding错误
多模块Android项目中Hilt依赖注入缺失FirebaseFirestore实例问题解决
问题描述
在多模块Android项目中使用Hilt进行依赖注入,已在firestore模块的FirebaseDiModule中配置了FirebaseFirestore、FirebaseAuth及UserFirestoreDataSource的提供逻辑,UserFirestoreDataSource通过@Inject构造注入。但给认证模块的OnBoardingViewModel添加@HiltViewModel注解后,编译报错:
error: [Dagger/MissingBinding] com.google.firebase.firestore.FirebaseFirestore cannot be provided without an @Inject constructor or an @Provides-annotated method. public abstract static class SingletonC implements AppController_GeneratedInjector,
移除@HiltViewModel注解则编译正常,无法定位问题根源。
相关代码
firestore模块 - FirebaseDiModule
@Module @InstallIn(SingletonComponent::class) object FirebaseDiModule { @Singleton @Provides fun provideFirebaseAuth(): FirebaseAuth { return FirebaseAuth.getInstance() } @Singleton @Provides fun provideFirestoreFirebase(): FirebaseFirestore { return FirebaseFirestore.getInstance() } @Singleton @Provides fun provideUserFirebaseDataSource( firebaseFirestore: FirebaseFirestore, firebaseAuth: FirebaseAuth, ): UserFirestoreDataSource { return UserFirestoreDataSource( firebaseFirestore = firebaseFirestore, firebaseAuth = firebaseAuth, ) } }
firebase模块 - UserFirestoreDataSource
class UserFirestoreDataSource @Inject constructor( private val firebaseFirestore: FirebaseFirestore, private val firebaseAuth: FirebaseAuth, )
认证模块 - OnBoardingViewModel
@HiltViewModel class OnBoardingViewModel @Inject constructor( userFirestoreDataSource: UserFirestoreDataSource, ) : ViewModel() {
App模块配置
@HiltAndroidApp class AppController : Application()
class MainActivity : ComponentActivity()
解决方案
1. 修复模块依赖传递
认证模块需要显式依赖包含FirebaseDiModule的firestore模块,否则Hilt无法感知到该Module的存在。在认证模块的build.gradle中添加依赖:
implementation project(":firestore")
2. 统一各模块的Hilt配置
确保所有涉及Hilt的模块(app、firestore、认证模块)都正确配置了Hilt插件和依赖:
- 项目根build.gradle:
plugins { id 'com.google.dagger.hilt.android' version '2.48' apply false // 其他插件... }
- 各模块build.gradle:
plugins { id 'kotlin-kapt' id 'com.google.dagger.hilt.android' // 其他插件... } dependencies { implementation "com.google.dagger:hilt-android:2.48" kapt "com.google.dagger:hilt-compiler:2.48" // 其他依赖... }
注意:替换版本号2.48为当前最新的Hilt稳定版本
3. 验证ViewModel的获取方式
在Activity/Fragment中必须通过Hilt提供的viewModels()方法获取ViewModel实例,不能手动构造:
// 在MainActivity中获取OnBoardingViewModel val viewModel: OnBoardingViewModel by viewModels()
4. 清理缓存并重新编译
Dagger/Hilt的缓存可能导致依赖解析异常,执行以下操作:
- 点击Android Studio菜单栏
Build -> Clean Project - 点击
Build -> Rebuild Project - 终端执行Gradle缓存清理:
./gradlew cleanBuildCache
内容的提问来源于stack exchange,提问作者TemZy
相关产品推荐
相关产品推荐

