簡體   English   中英

如何在DWT中使用Dagger2的子組件

[英]How to use Dagger2's subcomponent into GWT

我正在嘗試將兩個組件與Dagger2(2.17版)鏈接。 一種是GWT活動( MainView.class ),另一種是復雜的小部件,其中嵌入了一些映射功能( CarteWidget.class )。

我想將活動定義為一個@Component ,其中特別包含一個@Subcomponent以包含CarteWidget的依賴項。

這是我的主要組件及其模塊:

@Lvl1Scope
@Component(modules = Lvl1Module.class)
public interface Lvl1Component {

    MainView getMainView();

}

@Module(subcomponents = CarteSubComponent.class)
public class MainModule {

    @Provides
    public MainView provideMainView (CarteSubComponent.Builder carteBuilder) {
        return new MainView (carteBuilder.build().getCarte());
    }
}

還有我的子組件及其模塊:

@CarteScope
@Subcomponent(modules = CarteModule.class)
public interface CarteSubComponent {

    CarteWidget getCarte();

    @Subcomponent.Builder
    interface Builder {

        CarteSubComponent build();
    }

    @Module
    public class CarteModule {

    }

}

它可以工作,但我不喜歡它,我更喜歡將CarteWidget注入MainView中而不使用@Provides方法。 因此,我的主模塊僅包含從子組件獲取CarteWidget的方法:

@Module(subcomponents = CarteSubComponent.class)
public class Lvl1Module {

    @Provides
    public CarteWidget provideCarte(CarteSubComponent.Builder carteBuilder) {
        return carteBuilder.build().getCarte();
    }

}

但有了這個非常小的變化我得到了一個無限循環 ,因為provideCarte Lvl1Module時的方法被調用carteBuilder.build().getCarte()執行...

如果我在子組件中添加CarteWidget的producer方法, CarteWidget收到錯誤CarteWidget ,指出CarteWidget類型有兩個綁定,這是正確的。

我想要的是我的Lvl1Component能夠將Subcomponent注入到它的圖形中,並且我想讓Subcomponent選擇要使用的實現。 子組件可能嗎? 我誤會了什么?

Dagger中的組件表示“作用域”,也就是生命周期。 您的MainView依賴CarteWidget ,因此其生命周期(必須)比該窗口部件的生命周期更長。 這將導致視圖位於子組件中,而窗口小部件位於父組件中,而不是相反(或兩者都在同一組件中)。

如果要隔離,請使用組件依賴關系而不是子組件。 但您嘗試在此處向后綁定事物。

真正的問題是:為什么要使用子組件,甚至是單獨的組件?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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