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

多模块项目中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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:45:34