android 组件化dagger2,dagger.android组件化项目实现

本文适合有一定的Dagger2使用基础的同学

上一篇我们讲了dagger.android在普通多模块项目中的用法

本篇我们讲下组件化项目怎么使用dagger.android

具体实现和dagger.android多模块项目实现差不多,唯一差异是MultiModuleAndroidInjector放在BaseApplication中open class BaseApplication : Application(), HasAndroidInjector {

val multiModuleAndroidInjector = MultiModuleAndroidInjector()

lateinit var appComponent: AppComponent

override fun onCreate() {

super.onCreate()

instance = this

appComponent = DaggerAppComponent.factory().create(this)

}

companion object {

lateinit var instance: BaseApplication

}

override fun androidInjector(): AndroidInjector {

return multiModuleAndroidInjector

}

}

然后AppApplicationclass AppApplication : BaseApplication() {

override fun onCreate() {

super.onCreate()

//这部份应当各种模块中初始化(后期用插件实现)

val userDispatchingInjector = BaseDispatchingInjector()

UserComponentHolder.userComponent.inject(userDispatchingInjector)

multiModuleAndroidInjector.addInjector(userDispatchingInjector)

val newsDispatchingInjector = BaseDispatchingInjector()

NewsComponentHolder.newsComponent.inject(newsDispatchingInjector)

multiModuleAndroidInjector.addInjector(newsDispatchingInjector)

}

}

这里user,news模块初始化放在app模块中,与组件化思想不符,这里可以使用AppLike插件来实现,AppLike插件的作用是在任意模块实现APP初动时做一些初始化工作。

先中BaseApplication中加入AppLikeManager的onCreate和onTerminate方法open class BaseApplication : Application(), HasAndroidInjector {

val multiModuleAndroidInjector = MultiModuleAndroidInjector()

lateinit var appComponent: AppComponent

override fun onCreate() {

super.onCreate()

instance = this

appComponent = DaggerAppComponent.factory().create(this)

AppLikeManager.onCreate(this)

}

override fun onTerminate() {

AppLikeManager.onTerminate(this)

super.onTerminate()

}

companion object {

lateinit var instance: BaseApplication

}

override fun androidInjector(): AndroidInjector {

return multiModuleAndroidInjector

}

}

然后每个模块建一个AppLike,把初始化代码放在onCreate方法中@AppLike

class NewsAppLike : IAppLike {

override fun onCreate(context: Context) {

val newsDispatchingInjector = BaseDispatchingInjector()

NewsComponentHolder.newsComponent.inject(newsDispatchingInjector)

(context as? BaseApplication)?.run {

multiModuleAndroidInjector.addInjector(newsDispatchingInjector)

}

}

override fun getPriority(): Int {

return 5

}

override fun onTerminate(context: Context) {

}

}

@AppLike

class UserAppLike : IAppLike {

override fun onCreate(context: Context) {

val userDispatchingInjector = BaseDispatchingInjector()

UserComponentHolder.userComponent.inject(userDispatchingInjector)

(context as? BaseApplication)?.run {

multiModuleAndroidInjector.addInjector(

userDispatchingInjector

)

}

}

override fun getPriority(): Int {

return 5

}

override fun onTerminate(context: Context) {

}

}

这样APP启动的时候每个模块的初始化都会自动执行了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值