GWT Gin异步服务注入



我有一个关于使用Gin注入GWT异步RPC服务的问题。

我有两个类都使用相同的Async服务:

class TheViewA {    
    @Inject
    public TheViewA(MyServiceAsync myServiceASync) {
        ....
    }
}

class TheViewB {
    @Inject
    public TheViewB(MyServiceASync myServiceASync) {
        ....
    }
}

这很好。但是,我发现这会导致GWT内部调用:

GWT.create(MyServiceASync.class) 

每次注射两次。我不知道这样做的缺点是什么,但我认为它们都可以共享一个MyServiceAsync实例。

有人能告诉我如何配置Gin (Guice),以便为两个注入只创建MyServiceAsync的一个实例吗?

或者是否可以为两个注入创建单独的实例,为什么?

许多谢谢。

当涉及到注入时,如果Gin没有找到给定类型的绑定,它会自动回退到GWT.create()来创建实例。这就是为什么ClientBundle/GWT-RPC/i18n和类似的,简单地只是工作,你不必绑定他们到你自己的AbstractGinModule的扩展。

当然,当Gin发现另一个相同类型的注入时,它会注入另一个实例。要创建和注入一个单例实例,只需将GWT-RPC异步服务接口绑定到@Singleton作用域。这样的:
public class YourModule extends AbstractGinModule {
  @Override
  protected void configure() {
    bind(MyServiceAsync.class).in(Singleton.class);
  }
}

或者您可以创建一个总是返回一个单例实例的Provider<MyServiceAsync>,但是前面的方法要简单得多。

在整个应用程序中注入一个单例异步实例通常是首选。

相关内容

  • 没有找到相关文章

最新更新