gpt4 book ai didi

java - 如何在 GWT 中使用 Dagger2 的子组件

转载 作者:行者123 更新时间:2023-12-02 10:49:53 25 4
gpt4 key购买 nike

我正在尝试将两个组件与 Dagger2(版本 2.17)链接。一种是一种 GWT Activity (MainView.class),另一种是嵌入一些映射功能的复杂小部件 (CarteWidget.class)。

我想将 Activity 定义为 @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 注入(inject)到我的 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 的生成器方法添加到我的子组件中,我会收到一个错误,指出为 CarteWidget 类型找到了两个绑定(bind),这是事实。

我想要的是我的 Lvl1Component 能够将子组件注入(inject)到它的图中,并且我想让子组件选择要使用的实现。可以用子组件吗?我误解了什么?

最佳答案

Dagger 中的组件代表“范围”,也称为生命周期。您的 MainView 依赖于 CarteWidget,因此它的生命周期(必然)比小部件的生命周期长。这将导致 View 位于子组件中而小部件位于父组件中,而不是相反(或两者都位于同一组件中)。

如果你想要隔离,那么使用组件依赖而不是子组件;但你试图在这里向后绑定(bind)事物。

真正的问题是:为什么要使用子组件,甚至单独的组件?

关于java - 如何在 GWT 中使用 Dagger2 的子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52257504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com