2

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

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

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


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

这工作正常。但是,我发现这会导致 GWT 内部调用:

GWT.create(MyServiceASync.class) 

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

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

或者可以为注入创建单独的实例吗?为什么?

非常感谢。

4

1 回答 1

1

当涉及到注入时,如果Gin没有找到给定类型的绑定,它会自动回退到GWT.create()创建实例。这就是为什么ClientBundle//之类的,只是 Just Works GWT-RPCi18n而您不必将它们绑定到您自己的AbstractGinModule.

当然,当Gin找到另一个相同类型的注入时,它会注入另一个实例。要创建和注入单例实例,只需将您的GWT-RPC异步服务接口绑定到@Singleton范围内。像这样:

public class YourModule extends AbstractGinModule {
  @Override
  protected void configure() {
    bind(MyServiceAsync.class).in(Singleton.class);
  }
}

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

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

于 2013-03-16T17:05:25.710 回答