Dagger2 开发注意事项
1.component的inject方法接收父类型的参数,而调用时传入的参数是子类型对象则无法进行注入。
例如 我们一般都是在component中对Activity进行注册 我们注册是传入的是AppCompatActivity,当我们在MainActivity或者在LoginActivityh中进行绑定的时候出现错误。
2.component关联的modules中不能有重复的provide
3.module的provide方法使用了scope,那么component就必须使用同一个注解。
比如Module中的方法中使用了@Singleton,那么在Component中也必须使用和Module相同的@Singleton
4.module的provide方法中没有使用scope,那么component和module是否使用注解都没有关系,可以通过编译。
解释:在@Component中使用Scope,那么非必须在Module中的方法中使用相同的Scope
5 component的dependencies和component自身的scope不能相同,即组件之间的scope不同。
解释: Component使用的dependencies相当于是父类,dependencies的Component中使用的Scope 比如使用@Singleton ,那么 Component中使用的@Scope 必须的权限要小于@Singleton 可以自定义@ActivityScope,@FragmentScope
6 singleton的组件不能依赖其他scope的组件,只能其他scope的组件依赖singleton的组件
7 没有scope的component不能依赖有scope的component。
8 @singleton的生命周期依赖于component,同一个 module provide singleton,不同component也是一样。
9.@Singleton的生命周期 依附于Component,同一个module provide singleton,所生成的实例是相同的,但是不同的component生成的实例是不一样的。
自定义Scope
@Scope :注明是Scope
@Documented :标记在文档;
@Retention(RUNTIME): 运行时级别
Subcomponent .
1.Subcomponent同时具备两种不同生命周期的scope,SubComponent具备了父类Component的Scope,也具备了自己的Scope。
2 SubComponent的Scope范围小于 父类的Scope范围