Dagger2使用记录

2018-03-19  本文已影响0人  JFang

一.简介

image.png

简单来说,Container是需求方,这里需要用到的实例,在Module中被创建出来,然后通过 Component关联起来。

@Inject:
通常在需要依赖的地方使用这个注解。换句话说,你用它告诉Dagger这个类或者字段需要依赖注入。这样,Dagger就会构造一个这个类的实例并满足他们的依赖。

@Module:
Modules类里面的方法专门提供依赖,所以我们定义一个类,用@Module注解,这样Dagger在构造类的实例
时候,就知道从哪里去找到需要的 依赖。modules的一个重要特征是它们设计为分区并组合在一起(比如说,
我们的app中可以有多个组成在一起的modules)

@Provide:
在modules中,我们定义的方法是用这个注解,以此来告诉Dagger我们想要构造对象并提供这些依赖。

@Component:
Components从根本上来说就是一个注入器,也可以说是@Inject和@Module的桥梁,它的主要作用就是连接这两个部分。 Components可以提供所有定义了的类型的实例,比如:我们必须用@Component注解一个接口然后列出所有的

二.使用步骤

1.导入对于的包,这里要注意一下Android Studio3.0不能再使用apt,改用annotationProcessor

//dagger2
    annotationProcessor 'com.google.dagger:dagger-compiler:2.0.2' //指定注解处理器
    compile 'com.google.dagger:dagger:2.0.2'  //dagger公用api
    provided 'org.glassfish:javax.annotation:10.0-b28'  //添加android缺失的部分javax注解

2.编写Module类,在Module创建实例,并使用@Provides注解。这里的参数RecommendContract.View view,Dagger2会自动去查找带有@Provides并且返回值是RecommendContract.View的方法,提供参数

@Module
public class RecommendModule {

    private RecommendContract.View view;

    public RecommendModule(RecommendContract.View view){
        this.view = view;
    }

    @Provides
    public RecommendPresenter providePresenter(RecommendContract.View view){
        return new RecommendPresenter(view);
    }

    @Provides
    public RecommendContract.View provideView(){
        return view;
    }
}

3.提供调度器接口,使用@Component注解,并传入定义的模块RecommendModule,提供inject方法与Container关联

@Component(modules = RecommendModule.class)
public interface RecommendComponent {

    void inject(RecommendFragment fragment);
}

4.在需要被实例化的对象前面加上注解,@Inject,需要注意的是,这里类型不能设置为私有的,否则无法进行注入。

@Inject
    RecommendPresenter mPresenter;

5.具体使用方法,编写上面的步骤之后,需要rebuild一下,使其生成对于的代码。在Activity或者Fragment(Container容器调度)中使用:

  DaggerRecommendComponent.builder().appComponent(appComponent)
                .remmendModule(new RecommendModule(this)).build().inject(this);
上一篇下一篇

猜你喜欢

热点阅读