我有一个关于使用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>
,但是前面的方法要简单得多。