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

