美文网首页
Dagger2 简单使用

Dagger2 简单使用

作者: 冰吻心玉 | 来源:发表于2019-05-06 15:25 被阅读0次

    不带参数的 Inject

    1.将需要注入的对象的构造用@Inject标注 (告知dagger此对象可以实例化)

    2.编写Component接口使用@Component标注,里面的void Inject(目标位置)

    3.编译项目,自动生成Component生成的类,名字:Dagger+自定义Component的类名

    4.在需要注入的类中使用@Inject注入变量,调用自动生成的Component类方法create()或者builder().build。然后inject(this)。此时就可以使用注入进来的对象了

    带构造参数的对象Inject

    二、带MOdule的Inject方式(主要用于引入第三方库,别人写的代码)

    1.编写Module类并使用@Module标注此类,编写方法返回值为我们需要inject的类型并使用@Provides标注这个方法

    2.编写Component接口,使用@Component标注这个接口,并使用modules=的方法链接上一步中的Module类

    3.编译项目,自动生成Component生成的类,名字:Dagger+自定义Component的类名

    4.在需要注入的类中使用@Inject注入变量,调用自动生成的Component类方法create()或者builder().build。然后inject(this)。此时就可以使用注入进来的对象了

    二(1)复杂Module使用()只改Module类

    三、Component 依赖Component (类似extends)

    a、dependence实现

    1.父Component要显式写出要暴露可提供给子Component的依赖

    2.子Component在注解中使用dependencies= 来链接父Component

    3.注意子Component的实例化。

    b 、SubComponent方式

    1.先定义子Component,使用@SubComponent标注

    2.父Component中定义获得子Component的方法

    3.注意子Component实例化方式。

    总结

    在使用dagger2的过程中,在定义一些类或方法的名字的时候,要遵守一些谷歌提出的固定标准,以方便代码阅读与维护:

    1、定义的Component和Module的名字是无所谓的,但是一般遵照以Component或Module结尾的名称;

    2、Module中用@Provides标注的方法的方法名是无所谓的,返回值是最重要的,但是一般遵照以provide开头的方法名;

    3、Component中返回值为void且有参的方法,方法名是无所谓的,参数是最重要的代表的是要注入的目标位置,但是方法名一般为inject;

    4、Component中返回值不为void且无参的方法,方法名是无所谓的,返回值是最重要的代表的是暴露给子Component使用的依赖或者是获取的子Component的类型。

    相关文章

      网友评论

          本文标题:Dagger2 简单使用

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