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,同一個module provide 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();
}
}