热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

本文适合有一定的Dagger2使用基础的同学上一篇我们讲了dagger.android在普通多模块项目中的用法本篇我们讲下组件化项目怎么使用dagger.android具体实现和d

本文适合有一定的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启动的时候每个模块的初始化都会自动执行了



推荐阅读
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 标题: ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
author-avatar
手机用户2602918163
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有