gpt4 book ai didi

gwt - 吉斯/ Gin 。如何注入(inject)多个实现

转载 作者:行者123 更新时间:2023-12-04 11:13:32 25 4
gpt4 key购买 nike

我有一个使用 GIN 在入口点注入(inject)依赖项的 web 应用程序。

private InjectorService injector = GWT.create(InjectorService.class);
@GinModules({PlaceContollerInject.class, RootViewInject.class})
public interface InjectorService extends Ginjector {

RootView getRootView();
PlaceController getPlaceConroller();

}
public class RootViewInject extends AbstractGinModule {

@Override
protected void configure() {
bind(RootView.class).to(RootViewImpl.class);
}
}

我需要一个使用不同 RootView 实现的移动版本。依赖关系在以下模块中描述
public class RootViewMobileInject extends AbstractGinModule {

@Override
protected void configure() {
bind(RootView.class).to(RootViewMobileImpl.class);
}
}

问题是无论我们需要移动版本还是默认版本,如何有条件地选择所需的依赖项。
我看过 GWT-GIN Multiple Implementations ,但还没有想出那个解决方案,因为提供者打破了依赖关系的链,而工厂模式打破了可测试性。
在“带有 Guice 的大型模块化 Java”视频中 here (12 minute) Guice 的带模块的注入(inject)器是作为工厂的替代品。所以我的问题是我应该为我的应用程序的移动版本和默认版本(如 MobileFactory 和 DefaultFactory)创建不同的 Ginjector,否则这是不好的做法,我应该为一个 Ginjector 实例配置所有需要的版本。例如使用这样的注释绑定(bind)。
public class RootViewMobileInject extends AbstractGinModule {

@Override
protected void configure() {
bind(RootView.class).annotatedWith(Mobile.class).to(RootViewMobileImpl.class);
}
}

并在 GWT 入口点使用 @Mobile 注释绑定(bind)
  @Inject
private void setMobileRootView(@Mobile RootView rw) {
this.rw = rw;
}

在上面这样一个简化的例子中,它可能是可能的。但是,如果应用程序有更多依赖项,需要移动版本和默认版本。它看起来像是回到了无法测试的“丑陋”(正如 Guice 的演讲中所说的)工厂。
对不起我的英语不好。任何帮助表示赞赏。

最佳答案

我相信您会想要使用 GWT 延迟绑定(bind),使用类替换来绑定(bind)不同版本的 InjectorService,具体取决于用户代理。这将确保移动版本仅具有编译(和下载)的移动实现

因此,您将拥有 InjectorServiceDesktop、InjectorServiceMobile,它们都从 InjectorService 扩展,然后是 GWT.create(InjectorService.class),并让延迟绑定(bind)决定它应该使用哪个实现。

http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsDeferred.html#replacement

一个具有所有版本的 Ginjector 实例似乎很糟糕,因为这意味着始终下载两个版本的所有代码(而且您当然不想将所有桌面 View 下载到您的移动应用程序中)

编辑:正如 Thomas 在评论中指出的那样,由于 Injector 是生成的类,因此您需要将每个 InjectorServiceXXX 放在 GWT.create() 的简单持有者类中
InjectorServiceXXX,并使用替换在持有人之间切换。

关于gwt - 吉斯/ Gin 。如何注入(inject)多个实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8379247/

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