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

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值