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