这是我的问题。我在 gwt 项目中使用 Gin,我使用 GWT.create(SomeClass.class) 来获取实例,但问题是我想要 signleton 实例,为此我将应用程序模块中的该类绑定(bind)为单例。我执行 GWT.create(TemplatePanel.class) 的每一本书都返回不同的实例..为什么? 这是我的代码片段。 模块
public class AppClientModule extends AbstractGinModule
{
protected void configure()
{
bind(MainPanel.class).in(Singleton.class);
bind(TemplatePanel.class).in(Singleton.class);
}
}
注入(inject)器
@GinModules(AppClientModule.class)
public interface AppInjector extends Ginjector
{
MainPanel getMainForm();
TemplatePanel getTemplateForm();
}
模板面板
public class TemplatePanel extends VerticalPanel
@Inject
public TemplatePanel()
{
this.add(initHeader());
this.add(initContent());
}
..
主面板
public void onSuccess(List<MyUser> result)
{
.......
TemplatePanel temp = GWT.create(TemplatePanel.class);
.......
}
和入口点
private final AppInjector injector = GWT.create(AppInjector.class);
public void onModuleLoad()
{
MainPanel mf = injector.getMainForm();
TemplatePanel template = injector.getTemplateForm();
template.setContent(mf);
RootPanel.get().add(template);
}
最佳答案
GWT.create(..)
不适用于 GIN,它只是以普通的 GWT 方式创建一个对象。您应该:
在
MainPanel
中注入(inject)TemplatePanel
,或者实例化注入(inject)器(可能通过静态方法)然后获取
TemplatePanel
。
我通常有一个注入(inject)器的静态引用(因为每个应用只需要一个)所以我可以在任何地方访问它:
@GinModules(AppClientModule.class)
public interface AppInjector extends Ginjector
{
AppInjector INSTANCE = GWT.create(AppInjector.class);
MainPanel getMainForm();
TemplatePanel getTemplateForm();
}
(注意:常量接口(interface)字段根据定义是公共(public)和静态的,因此您可以省略它们。)
然后你会使用:
TemplatePanel temp = AppInjector.INSTANCE.getTemplateForm();
关于java - 使用 GWT 的 Gin 问题 - GWT.create(someClass.class) 每次调用时返回不同的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6213672/