美文网首页
Dagger2学习笔记(一)

Dagger2学习笔记(一)

作者: 7rv | 来源:发表于2018-02-27 11:29 被阅读0次

    环境配置

    在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)
    

    相关文章

      网友评论

          本文标题:Dagger2学习笔记(一)

          本文链接:https://www.haomeiwen.com/subject/psmpxftx.html