Dagger2 简单使用

不带参数的 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 简单使用)