簡體   English   中英

Dagger2組件通用注入方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM