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

Dagger Hilt中DoggoApi重复绑定问题修复咨询

解决Hilt中[Dagger/DuplicateBindings]重复绑定DoggoApi的问题

问题根源

DataModule.provideDoggoApi()和NetworkingModule.provideDoggoApi(OkHttpClient)两个@Singleton作用域的方法都提供了DoggoApi实例,Hilt无法确定注入链路中该使用哪个实例,因此抛出重复绑定错误。

解决方案

方案1:移除重复的Provide方法(优先推荐)

模块化项目中应遵循单一职责原则,将网络Api实例的创建统一交给专门的网络模块(比如这里的NetworkingModule),删除DataModule中重复的provideDoggoApi()方法,确保整个项目只有一处提供DoggoApi的单例实例。

示例修改:
删除DataModule中的以下代码:

@Singleton
@Provides
fun provideDoggoApi(): DoggoApi {
    // 原DataModule中的Api创建逻辑
}

方案2:使用@Qualifier区分不同实例(需多实例场景)

如果业务确实需要两个不同配置的DoggoApi实例,通过自定义@Qualifier注解来标记不同的绑定,让Hilt明确注入哪个实例。

  1. 定义Qualifier注解:
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class NetworkingDoggoApi

@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class DataDoggoApi
  1. 给两个Provide方法添加对应的Qualifier:
// NetworkingModule
@Singleton
@NetworkingDoggoApi
@Provides
fun provideDoggoApi(okHttpClient: OkHttpClient): DoggoApi {
    return Retrofit.Builder()
        .client(okHttpClient)
        .baseUrl("https://your-network-api-url.com/")
        .build()
        .create(DoggoApi::class.java)
}

// DataModule
@Singleton
@DataDoggoApi
@Provides
fun provideDoggoApi(): DoggoApi {
    return Retrofit.Builder()
        .baseUrl("https://your-data-api-url.com/")
        .build()
        .create(DoggoApi::class.java)
}
  1. 在注入时指定Qualifier:
class DoggoRepository @Inject constructor(
    @NetworkingDoggoApi private val doggoApi: DoggoApi
) {
    // 业务逻辑实现
}

方案3:调整模块依赖关系

确保Data模块依赖Networking模块,让Data模块直接使用NetworkingModule提供的DoggoApi实例,而非自行创建。这样既避免重复绑定,也符合模块化分层的依赖规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:20:30