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

}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章