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

如何解决Dagger-Hilt引发的Dagger/MissingBinding依赖注入报错

问题场景

采用 Kotlin Clean Architecture + Hilt 技术栈开发Android项目时,构建阶段抛出Dagger依赖绑定缺失错误。

完整报错日志
C:\Users\ayoub\AndroidStudioProjects\cleanArchitecture_project\app\build\generated\source\kapt\debug\com\example\cleanarchitecture_project\presentation\App_HiltComponents.java:122: error: [Dagger/MissingBinding] com.example.cleanarchitecture_project.domain.repository.UserRepository cannot be provided without an @Provides-annotated method.
  public abstract static class SingletonC implements App_GeneratedInjector,
                         ^
      com.example.cleanarchitecture_project.domain.repository.UserRepository is injected at
          com.example.cleanarchitecture_project.domain.UseCase(repository)
      com.example.cleanarchitecture_project.domain.UseCase is injected at
          com.example.cleanarchitecture_project.presentation.UserViewModel(useCase)
      com.example.cleanarchitecture_project.presentation.UserViewModel is injected at
          com.example.cleanarchitecture_project.presentation.UserViewModel_HiltModules.BindsModule.binds(vm)
      @dagger.hilt.android.internal.lifecycle.HiltViewModelMap java.util.Map<java.lang.String,javax.inject.Provider<androidx.lifecycle.ViewModel>> is requested at
          dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.ViewModelFactoriesEntryPoint.getHiltViewModelMap() [com.example.cleanarchitecture_project.presentation.App_HiltComponents.SingletonC ? com.example.cleanarchitecture_project.presentation.App_HiltComponents.ActivityRetainedC ? com.example.cleanarchitecture_project.presentation.App_HiltComponents.ViewModelC]
问题根因

Hilt依赖图中没有注册UserRepository类型的实例提供规则,无法满足UseCase构造函数的入参依赖,最终导致ViewModel注入链路整体构建失败。

修复步骤
  • 确认分层结构符合Clean Architecture规范:UserRepository是domain层定义的抽象接口,具体实现类UserRepositoryImpl放在data层
  • 给Repository实现类添加@Inject构造注解,允许Hilt创建实例:
// data层的实现类
class UserRepositoryImpl @Inject constructor(
    // 按需注入远程数据源、本地Dao等依赖
) : UserRepository {
    // 实现UserRepository接口定义的所有方法
}
  • 新建Hilt模块,完成抽象接口到实现类的绑定:
@Module
@InstallIn(SingletonComponent::class) // 全局单例生命周期,匹配Repository常规使用场景
abstract class RepositoryBindModule {
    @Binds
    abstract fun bindUserRepository(impl: UserRepositoryImpl): UserRepository
}
  • 执行Gradle Sync后重新构建项目即可。

常见踩坑排查

  • 模块类必须同时加@Module和@InstallIn注解,缺任何一个Hilt都不会识别该模块
  • 不要给domain层的UserRepository接口直接加@Inject注解,接口无法直接实例化
  • 绑定方法的返回值必须是抽象的UserRepository类型,入参必须是具体实现类,不要写反
  • 如果用@Provides写法手动提供实例,要确保方法返回值类型为UserRepository,且不要把模块安装在ViewModel、Activity这类短生命周期组件中,否则上层依赖无法找到实例

内容的提问来源于stack exchange,提问作者ayoub belmaati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:39:18