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

如何通过Dagger Hilt配置Apollo Client?多模块注入报MissingBinding错误

问题根因

你遇到的Dagger/MissingBinding错误是因为Hilt没有识别到graphql模块中提供的ApolloApi绑定规则,多模块场景下Hilt的注解处理器默认仅处理当前模块的注解,依赖配置不全就会出现这个问题。

解决方案

按以下步骤排查修复:

1. 确认模块依赖配置

home模块必须显式依赖graphql模块,才能访问到graphql模块中的ApolloApi和Hilt模块配置,在home模块的build.gradle中添加依赖:

dependencies {
    implementation project(":graphql")
    // 其他原有依赖
}

2. 补全graphql模块的Hilt配置

所有使用Hilt注解(@Module、@InstallIn等)的模块都需要单独配置Hilt注解处理器:
如果graphql是Android Library模块,build.gradle配置如下:

// 顶部插件配置
plugins {
    id 'com.android.library'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
}

dependencies {
    implementation "com.google.dagger:hilt-android:2.44"
    kapt "com.google.dagger:hilt-android-compiler:2.44"
    // 其他Apollo、OkHttp等原有依赖
}

如果graphql是纯Kotlin/JVM模块,build.gradle配置如下:

// 顶部插件配置
plugins {
    id 'java-library'
    id 'org.jetbrains.kotlin.jvm'
    id 'kotlin-kapt'
}

dependencies {
    implementation "com.google.dagger:hilt-core:2.44"
    kapt "com.google.dagger:hilt-compiler:2.44"
    // 其他Apollo、OkHttp等原有依赖
}

3. 检查包名一致性

确认HomeViewModel中注入的com.example.apollo.ApolloApi和graphql模块中定义的ApolloApi包名完全一致,没有导错类。

4. 清理重建项目

Hilt生成代码存在缓存,配置修改后执行Build -> Clean Project,再执行Build -> Rebuild Project即可消除报错。


可选优化

你当前的ApolloApi每次调用getApolloClient()都会新建OkHttpClient和ApolloClient实例,会造成不必要的性能损耗,可以调整为单例提供:

// 调整后的ApolloModule
@Module
@InstallIn(SingletonComponent::class)
object ApolloModule {

    @Singleton
    @Provides
    fun provideOkHttpClient() = OkHttpClient.Builder().build()

    @Singleton
    @Provides
    fun provideApolloClient(okHttpClient: OkHttpClient): ApolloClient {
        return ApolloClient.builder()
            .serverUrl(BuildConfig.BASE_URL)
            .okHttpClient(okHttpClient)
            .build()
    }

    @Singleton
    @Provides
    fun provideApolloApi(apolloClient: ApolloClient) = ApolloApi(apolloClient)
}

// 调整后的ApolloApi
class ApolloApi(private val apolloClient: ApolloClient) {
    fun getApolloClient(): ApolloClient = apolloClient
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:18:00