Dagger2使用注意事项

Component,Module
  1. component的inject方法接收父类型的参数,而调用时传入子类型对象则无法注入。
  2. component关联的modules不能有重复的provide。
  3. module的provide方法使用了scope,那么component就必须使用同一个注解。
  4. module的provide方法没有使用scope,那么component和module中是否添加注解都无所谓。
  5. component的dependencies与component自身的scope不能相同,即组件(module)之间的scope不同。
  6. singleton的组件不能依赖其他scope的组件,只能其他scope组件依赖singleton组件。
  7. 没有scope的component不能依赖有scope的component。
  8. 一个component不能同时有多个scope(SubComponent除外)。
  9. @Singleton的生命周期依附于component。不同component依赖同一个module,这个module里面有provide singleton,那这个singleton只相对于当前Component是单例的。
SubComponent:
  1. SubComponent同时具有两种不同生命周期的scope,SubComponent具备了父Component拥有的scope,也具备了自己的scope。
  2. SubComponent的scope范围小于父component的scope。
Lazy和Provider
public class Container{
	@inject Lazy<User> lazyUser;// 注入Lazy元素
	@inject Provider<User> providerUser;//注入Provider元素
	
	public void init(){
		DaggerComponent.create().inject(this);
		//在这时才创建user1,以后每次调用get会得到同一个user对象。
		User user1 = lazyUser.get();
		
		//在这时创建user2,以后每次调用get会再强制调用Module的provides方法一次,根据Provides方法的具体实现不同,可能返回跟user2同样的对象,也可能不是。
		User user2 = providerUser.get();
	}

}
 
发布了36 篇原创文章 · 获赞 11 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_18824545/article/details/95315975