陆陆续续几篇文章已经讲解了项目中 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 相关语法知识以及基类封装等。茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔