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

如何使用Dagger 2.14.1向Presenter注入App Context?解决注入报错

解决Dagger 2.14.1注入App Context到Presenter的问题

嘿,我来帮你搞定这个Dagger注入的报错问题!

首先咱们先拆解下报错原因:

Error:(7, 1) error: [dagger.android.AndroidInjector.inject(T)] android.app.Application cannot be provided without an @Inject constructor or from an @Provides-annotated method.

这个错误本质是Dagger找不到android.app.Application的依赖提供者。虽然你的CustomApplication是Application的子类,但Dagger不会自动把子类实例向上转型为父类提供,必须咱们明确告诉它怎么获取Application实例。

具体解决方案

方案一:直接使用CustomApplication作为依赖参数

修改你的ApplicationModule,把provideContext方法的参数换成CustomApplication——因为你的ApplicationComponent是绑定到CustomApplication的,Dagger可以直接注入这个实例,返回它作为Context即可:

@Module
class ApplicationModule {
    @Provides
    @Singleton
    fun provideContext(application: CustomApplication): Context {
        return application
    }
}

方案二:新增Application的提供者方法

如果想保持参数为Application,可以在ApplicationModule里新增一个@Provides方法,专门提供Application实例:

@Module
class ApplicationModule {
    @Provides
    @Singleton
    fun provideApplication(application: CustomApplication): Application {
        return application
    }

    @Provides
    @Singleton
    fun provideContext(application: Application): Context {
        return application
    }
}

额外注意事项

还有个小细节要修正:你Presenter里的context.getString(R.strings.test)写错了,应该是R.string.test(去掉strings里的s),不然会出现资源找不到的编译错误哦!

另外,确保你的SplashActivity完成了正确注入:如果没有继承DaggerActivity,记得在onCreate方法开头调用AndroidInjection.inject(this),示例代码如下:

class SplashActivity : AppCompatActivity() {
    @Inject lateinit var presenter: SplashPresenter

    override fun onCreate(savedInstanceState: Bundle?) {
        AndroidInjection.inject(this)
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)
        presenter.test()
    }
}

这样修改后,Dagger就能正确把App Context注入到SplashPresenter里,你从string.xml获取日志消息的需求就能正常实现啦~

内容的提问来源于stack exchange,提问作者Guillermo Antonio Varela Herre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:41:18