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

Dagger 2.11升级后出现[dagger.android.AndroidInjector.inject(T)]依赖循环错误

解决Dagger 2.11升级后的依赖循环问题

我仔细看了你的错误日志和代码,立刻找到了问题的根源——你的AppModules里的provideAPI方法完全写反了,直接导致了循环依赖。

问题分析

从错误日志的依赖链能清晰看到循环的起点:

com.example.anbu.mvpkotlin.data.network.NccApi is injected at com.example.anbu.mvpkotlin.di.modules.AppModules.provideAPI$app_debug(apiManager)
com.example.anbu.mvpkotlin.data.network.NccApi is injected at com.example.anbu.mvpkotlin.ui.accounts.interactor.AccountInteractor.<init>(…, api)

你在AppModules里写了这段逻辑矛盾的代码:

@Provides @Singleton internal fun provideAPI(apiManager: NccApi): NccApi = apiManager

这相当于告诉Dagger:“我需要一个NccApi实例,才能提供NccApi实例”——这本身就是死循环:Dagger要创建NccApi,得先调用这个方法,但调用这个方法又需要先拿到NccApi实例,自然触发依赖循环报错。

之前2.11版本没报错,大概率是旧版Dagger没有严格检测这种无效的Provider方法,而2.11增强了依赖循环的检测逻辑,所以现在这个隐藏问题被暴露出来了。

解决方案

步骤1:删除AppModules中的无效provideAPI方法

直接删掉这行代码,它完全是多余的,而且是循环依赖的核心诱因。

步骤2:在RetrofitModule中添加正确的NccApi Provider

RetrofitModule负责创建Retrofit实例,所以应该在这里提供NccApi的实例,添加以下代码:

@Provides
@Singleton
internal fun provideNccApi(retrofit: Retrofit): NccApi {
    return retrofit.create(NccApi::class.java)
}

同时确保RetrofitModule中有完整的Retrofit Provider(如果还没补全的话):

@Provides
@Singleton
internal fun provideRetrofit(gson: Gson, okHttpClient: OkHttpClient): Retrofit {
    return Retrofit.Builder()
        .baseUrl(mBaseUrl)
        .addConverterFactory(GsonConverterFactory.create(gson))
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // 适配你用到的RxJava
        .client(okHttpClient)
        .build()
}

步骤3:验证依赖链路

现在Dagger会通过RetrofitModule正常创建NccApi实例,再依次注入到AccountInteractor、AccountPresenter,最终到AccountActivity,整个依赖链路没有循环,编译就能正常通过了。

额外检查

  • 确保RetrofitModule已经被添加到AppComponent的modules列表中,让Dagger能找到它的Provider方法;
  • 检查项目中是否有其他重复提供NccApi的代码,避免出现多实例冲突。

按照这个方案修改后,重新编译项目,依赖循环的问题应该就能彻底解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:20:47