如何通过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
相关产品推荐
相关产品推荐

