陆陆续续几篇文章已经讲解了项目中 Kotlin 如何配置、简单语法、DataBinding 配置,接下来就要说到 Kotlin 中的 Dagger2 了。
配置 Dagger2
项目中使用 Dagger2 ,首先还是添加依赖。同样的,因为要使用到注解处理,所以和 DataBinding 一样要添加 kapt 插件:
apply plugin: 'com.android.application' ... apply plugin: 'kotlin-kapt' // kapt 插件 ... kapt { generateStubs = true } dependencies { ... implementation 'com.google.dagger:dagger:2.12' // Dagger 2 依赖 implementation 'com.google.dagger:dagger-android-support:2.12' // Dagger 2 Android 支持包 kapt 'com.google.dagger:dagger-compiler:2.12' // Dagger 2 注解处理 }
配置很简单,就这样完成了。
使用 Dagger2
简单的配置完 Dagger2 ,接下来就是如何在 Android 项目中使用了。参见官方说明
首先使 Application 继承 DaggerApplication,Activity 继承 DaggerAppCompatActivity,Fragment 继承 DaggerFragment。
新建一个接口使用 @Subcomponent 注解继承
AndroidInjector
@Subcomponent(modules = arrayOf(...)) // 没有其他 Module 圆括号可省略 interface YourActivitySub : AndroidInjector{ @Subcomponent.Builder abstract class Builder : AndroidInjector.Builder () }
新建一个抽象类使用 @Module 注解,用于出入 Activity。
@Module(subcomponents = arrayOf( YourActivitySub::class)) // 每新建一个 Activity,都要新建相应的 ActivitySub 接口,并添加到这里 abstract class ActivityModule { @Binds // 每新建一个 Activity,都要添加一个相应方法,方法名不能相同 @IntoMap @ActivityKey(YourActivity::class) abstract fun bindYourActivity(builder: YourActivitySub.Builder): AndroidInjector.Factory}
新建接口 YouApplicationSub 使用 @Component 注解,继承
AndroidInjector
@Singleton // 如果有 Module 使用了该注解实现单例模式,这里也需要添加 @Component(modules = arrayOf( ActivityModule::class, // 注入 Activity 的 Module FragmentModule::class, // 注入 Fragment 的 Module ... AndroidSupportInjectionModule::class)) // 确保 DaggerApplication、DaggerActivity、DaggerFragment等所有类型可用 interface ApplicationSub : AndroidInjector{ @Component.Builder abstract class Builder : AndroidInjector.Builder () }
使你的 Applicatoin 类继承 DaggerApplication。
class MyApplication : DaggerApplication() { // 如果项目中使用了 v4.Fragment 要继承 support 包下的 DaggerApplication override fun applicationInjector() : AndroidInjector{ return DaggerApplicationSub.builder().create(this) // 编译后生成 } }
优化
这样使用是不是很麻烦?在 Dagger2 2.11 版本之前,项目中每添加一个 Activity 或 Fragment 等组件,都要新建一个对应 Subcomponent 接口,并添加到对应的 Module 中,并且添加相应的方法。这样使用起来太复杂了。
好在 google 也同样的意识到了这个问题,所以在 Dagger2 2.11 版本及其以后,Dagger2 又为我们提供了一个 @ContributesAndroidInjector 注解,大大的简化了使用。
首先,使用这个注解,你需要添加上 Dagger2 注解处理的 Android 支持:
dependencies { ... implementation 'com.google.dagger:dagger:2.12' // Dagger 2 支持 implementation 'com.google.dagger:dagger-android-support:2.12' // Dagger 2 Android 支持 kapt 'com.google.dagger:dagger-compiler:2.12' // Dagger 2 注解处理 kapt 'com.google.dagger:dagger-android-processor:2.12' // Dagger 2 注解处理 Android 支持 ... }
然后,在注入 Activity 的 Module 中改变:
@Module // 不需要再为每个 Activity 新建对应的 Subcomponent,不必再添加到这里 abstract class ActivityModule { @ContributesAndroidInjector abstract fun contributeYourActivity() : YourActivity }
就这样,是不是简洁了很多?之后每添加一个 Activity,只需要在 Activity 添加一个对应的方法就可以了。
@ContributesAndroidInjector 注解自动生成对应的 Subcomponent 而不需要我们手动添加。
语法解析
Dagger 2 的配置使用说完了,但是相信很多人对上面的一些语法都不了解,这里来简单说明:
// Kotlin 提供的方法,能简单快速的生成一个数组 val array = arrayOf("1", "2") // 与之类似的还有 arrayListOf() 、 setOf() 等,以后详细说明 // 类对象 A::class // 相当于 Java 中的 A.class,同时还有 A.javaClass 相当于 Java 中的 A.getClass()
最后
今天的 Kotlin Dagger2 使用就讲到这里,接下来我还会为大家带来更多的 Kotlin 相关语法知识以及基类封装等。火柴人绳索英雄2无限金币版 (Stickman Rope Hero 2)安卓版v2.2v3.4.2
下载奥特曼之格斗超人内测版本 安卓最新版v11.0.0
下载奥特曼之格斗超人百度版 安卓版v11.0.0
下载奥特曼之格斗超人4399游戏盒版 最新安卓版v11.0.0
下载德凯奥特曼D闪光剑模拟器 安卓版v1.0
德凯奥特曼D闪光剑模拟器是一个非常有趣的奥特曼变身模拟器,可
亚刻觉醒器 安卓版v1.1
亚刻觉醒器模拟器是一个非常有趣的奥特曼变身模拟器,为喜欢亚刻
海上餐厅无限金币版 v1.0
海上餐厅免广告版是游戏的破解版本,在该版本中为玩家去除了广告
阿西美女室友竟然全解锁版 v1.0.2
阿西美女室友竟然内置菜单版是游戏的破解版本,在该版本中为玩家
我是大东家正版 最新版v1.2.738
我是大东家正版是一款放置类模拟经营手游,玩家将回到古代成为家