[英]Dagger2 component generic inject method
我將我的應用程序從Dagger1.0轉換為dagger2.0,並且有一個包含許多void inject(Activity/Fragment/Receiver/etc object)
方法的應用程序組件。
使用dagger 1.0,我只能執行objectGraph.inject(Object object)
但是現在我的組件必須為每個要注入依賴項的類提供一個方法。
為什么我不能只有一個具有一種方法的組件: <T> void inject(T t);
?
供參考: 我的組件現在:
public interface AppComponent {
void inject(MyFirstActivity activity);
void inject(MySecondActivity activity);
void inject(MyFirstFragment fragment);
void inject(MySecondFragment fragment);
...
}
我想要的組件:
public interface AppComponent {
<T> void inject(T object);
}
為什么我不能只有一個具有一種方法的組件:
<T> void inject(T t);
?
因為dagger-2
使用代碼生成,並且需要在編譯時知道類型信息。 沒有它,就無法確定T
需要哪些依賴項-因此將無法生成代碼。
如果編譯第一個組件並檢查生成的Dagger*Component
源代碼,您將看到每個inject
方法都具有自己的工廠方法,並提供給定類型的所有依賴關系。
這與注入子類相同。 您可以在組件文檔中查看有關協方差的說明A段落。 由於超類類型是已知的,因此dagger可以注入超類中的成員,但不會注入潛在子類型的成員。 同樣,由於dagger-2
依賴於編譯時代碼生成,因此這是不可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.