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

如何使用DaggerApplication与DaggerAppCompatActivity?基于Dagger2 2.15版本

用Dagger 2.15的DaggerApplication和DaggerAppCompatActivity简化Android依赖注入

我之前在项目里用过这个版本的Dagger,这俩类确实能帮你省去不少手动初始化注入的麻烦,下面一步步来拆解用法:

1. 配置AppComponent与注入模块

首先你需要定义一个继承自AndroidInjector<YourApplication>的AppComponent,加上@Singleton注解,同时引入Dagger提供的基础模块,再搭配你自己的业务模块:

// Kotlin示例,Java写法逻辑完全一致
@Singleton
@Component(modules = [
    AndroidInjectionModule::class,
    AndroidSupportInjectionModule::class, // 对应dagger-android-support依赖
    YourAppGlobalModule::class,
    ActivityBindingModule::class // 专门用来绑定Activity的模块
])
interface AppComponent : AndroidInjector<MyApplication> {

    // 如果需要自定义注入参数(比如传入Application实例),可以添加Builder
    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: Application): Builder
        fun build(): AppComponent
    }
}

接下来创建ActivityBindingModule,用@ContributesAndroidInjector注解自动生成对应Activity的Subcomponent,不用手动编写Subcomponent类:

@Module
abstract class ActivityBindingModule {
    // 绑定MainActivity,Dagger会自动生成MainActivitySubcomponent
    @ContributesAndroidInjector(modules = [MainActivityModule::class]) // 若Activity有专属模块可添加
    abstract fun bindMainActivity(): MainActivity
}

2. 自定义Application继承DaggerApplication

创建自己的Application类,继承DaggerApplication并重写applicationInjector()方法,返回你的AppComponent实例:

class MyApplication : DaggerApplication() {
    override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
        // 若使用了Builder模式,按如下方式初始化
        return DaggerAppComponent.builder()
            .application(this)
            .build()
        // 如果不需要自定义参数,直接调用DaggerAppComponent.create()即可
    }
}

别忘了在AndroidManifest.xml里替换默认的Application:

<application
    android:name=".MyApplication"
    ...>
    ...
</application>

3. 让Activity继承DaggerAppCompatActivity

你的Activity只需要继承DaggerAppCompatActivity,Dagger会自动完成注入,不用再手动写AndroidInjection.inject(this):

class MainActivity : DaggerAppCompatActivity() {
    // 用@Inject标记需要注入的依赖
    @Inject
    lateinit var myRepository: MyRepository

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 此时myRepository已完成注入,可直接使用
        myRepository.fetchData()
    }
}

核心注意点

  • DaggerApplication帮你封装了AppComponent的初始化与全局注入生命周期管理,不用手动维护Component实例
  • DaggerAppCompatActivity内部已经自动调用了注入逻辑,省去了Activity中手动触发注入的代码
  • @ContributesAndroidInjector是Dagger 2.10+引入的简化注解,自动生成Subcomponent,大幅减少模板代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:29:41