Component,Module
- component的inject方法接收父类型的参数,而调用时传入子类型对象则无法注入。
- component关联的modules不能有重复的provide。
- module的provide方法使用了scope,那么component就必须使用同一个注解。
- module的provide方法没有使用scope,那么component和module中是否添加注解都无所谓。
- component的dependencies与component自身的scope不能相同,即组件(module)之间的scope不同。
- singleton的组件不能依赖其他scope的组件,只能其他scope组件依赖singleton组件。
- 没有scope的component不能依赖有scope的component。
- 一个component不能同时有多个scope(SubComponent除外)。
- @Singleton的生命周期依附于component。不同component依赖同一个module,这个module里面有provide singleton,那这个singleton只相对于当前Component是单例的。
SubComponent:
- SubComponent同时具有两种不同生命周期的scope,SubComponent具备了父Component拥有的scope,也具备了自己的scope。
- 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();
}
}