环境配置
在Module中build.gradle中添加如下代码
//kotlin
apply plugin: 'kotlin-kapt'
//java
apply plugin: 'com.neenbedankt.android-apt'
dependencies {
compile 'com.google.dagger:dagger:2.14.1'
//kotlin
kapt 'com.google.dagger:dagger-compiler:2.14.1'
//java
apt 'com.google.dagger:dagger-compiler:2.14.1'
}
@Inject
1、Dagger内置注解
2、用来标注目标对象
3、用来标注依赖类构造方法
//标注目标对象
lateinit var mainPresenter : MainPresenter
@Inject set
//标注构造方法
class MainPresenter @Inject constructor() {
}
如果依赖类的构造标注了该注解,Dagger会通过构造实例化将该类注入到目标成员变量上。
@Component
1、目标对象和依赖类构造不会凭空建立联系,需要Component将他们建立联系。
2、标注类必须为接口或抽象类
@Component
interface MainComponent {
fun inject(mainActivity : MainActivity)
}
编写编译完成后,Dagger会自动生成一个以Dagger开头的Component文件。
使用Component建立联系
DaggerMainComponent.create().inject(this)
@Module
1、如果目标类含有参构造或该类为接口或第三方类库时,需要使用一个含有@Module注解的工厂类提供实例。
2、一个Component可以有多个Module
//创建MainPresenter实例需要一个String类型的参数
class MainPresenter @Inject constructor(str : String) {
}
//添加module
@Component(modules = arrayOf(MainModule::class))
interface MainComponent {
fun inject(mainActivity: MainActivity)
}
@Module
class MainModule {
//使用Provides注解标注由该方法提供实例
@Provides
fun providesMainPresenter(): Ts {
return MainPresenter("mainPresenter")
}
}
//建立联系的代码也需要更改
DaggerMainComponent.builder()
.mainModule(MainModule())
.build()
.inject(this)
网友评论