美文网首页
Dagger2使用记录

Dagger2使用记录

作者: JFang | 来源:发表于2018-03-19 16:27 被阅读0次

    一.简介

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

    相关文章

      网友评论

          本文标题:Dagger2使用记录

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