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

Dagger独立模块中接口绑定无法解析的问题求助

Dagger跨模块绑定接口与实现类报错解决方案

当你在跨模块场景下用@Binds绑定Paying接口和Purchase实现类时,出现cannot be provided without an @Provides-annotated method错误,而同模块正常,可按以下步骤解决:

核心原因

跨模块时Dagger无法识别实现类的@Inject构造函数或绑定模块,通常是模块依赖配置、注解处理器配置或组件扫描范围的问题。

解决步骤

1. 配置注解处理器(Kotlin项目必做)

在实现类所在模块的build.gradle中启用kotlin-kapt插件,并添加对应依赖:

plugins {
    id 'com.android.library'
    id 'kotlin-android'
    id 'kotlin-kapt' // 启用Kotlin注解处理器
    // 若使用Hilt,需额外添加:
    id 'dagger.hilt.android.plugin'
}

dependencies {
    // 纯Dagger依赖示例
    implementation 'com.google.dagger:dagger:2.50'
    kapt 'com.google.dagger:dagger-compiler:2.50'

    // 若使用Hilt,替换为以下依赖
    implementation 'com.google.dagger:hilt-android:2.50'
    kapt 'com.google.dagger:hilt-android-compiler:2.50'
}

2. 建立模块间依赖

在接口所在模块的build.gradle中添加对实现模块的依赖,确保Dagger能找到实现类:

dependencies {
    implementation project(':你的实现模块名称') // 替换为实际模块名
}

3. 验证绑定模块与组件配置

  • 使用Hilt的场景:
    确保PayingModule是public(Kotlin顶级类默认满足),且@InstallIn(SingletonComponent::class)配置正确。同时应用模块的Application类必须标注@HiltAndroidApp,保证Hilt能扫描所有模块的@Module。

  • 使用纯Dagger的场景:
    在自定义Component中显式引入PayingModule,且Component所在模块需依赖实现模块:

    @Singleton
    @Component(modules = [PayingModule::class])
    interface AppComponent {
        // 声明注入方法,例如:
        fun inject(target: MainActivity)
    }
    

4. 清理重建项目

执行Clean Project -> Rebuild Project,确保Dagger生成的代码为最新状态。

额外排查点

  • 检查Purchase类的@Inject构造函数是否为public(Kotlin中public类的构造函数默认满足)。
  • 避免用internal修饰绑定模块或实现类,防止跨模块访问受限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:33:14