我有这样的事情:
request.findAllProjects().fire(new ExtReceiver<List<ProjectProxy>>() {
@Override
public void onSuccess(List<ProjectProxy> response) {
view.setProjects(response);
}
});
它是抽象类ExtReceiver的匿名内部类。 ExtReceiver用于处理我想提供的errorHandler错误。
public abstract class ExtReceiver<T> extends Receiver<T> {
private ErrorHandler errorHandler;
public ExtReceiver() {
}
@Inject
public void setErrorHandler(ErrorHandler errorHandler)
{
this.errorHandler = errorHandler;
}
@Override
public abstract void onSuccess(T response);
@Override
public void onFailure(ServerFailure error) {
errorHandler.exception(error);
}
@Override
public void onViolation(Set<Violation> errors) {
ValidationUtils.processViolation(errors);
}
}
我理解为什么这不起作用,因为我使用新的运算符。但我怎么能这样做呢。我希望拥有该匿名类,而不是将其放在自己的文件中。 我怎么能注入那个errorHandler?考虑一下staticInjections,但看起来这样也行不通(也许是因为我创建了一个匿名类创建的继承)
与普通Guice相反,我不知道一个injector.getInstance()调用。
有关信息:这是一个requestFactory调用
答案 0 :(得分:1)
为什么不将errorHandler参数放入抽象类的构造函数中,而是创建一个单独的setErrorHandler setter,如下所示:
public abstract class ExtReceiver<T> extends Receiver<T> {
private ErrorHandler errorHandler;
@Inject
public ExtReceiver(ErrorHandler errorHandler) {
this.errorHandler = errorHandler;
}
}
声明绑定:
public class MyClientModule extends AbstractGinModule {
protected void configure() {
bind(ErrorHandler.class).in(Singleton.class);
}
}
为您的ErrorHandler类声明一个Ginjector,用模块注释它:
@GinModules(MyClientModule.class)
public interface MyErrorHandlerInjector extends Ginjector {
ErrorHandler getErrorHandler();
}
然后像这样使用它:
MyErrorHandlerGinjector injector = GWT.create(MyErrorHandlerGinjector.class);
ErrorHandler errorHandler = injector.getErrorHandler();
request.findAllProjects().fire(new ExtReceiver<List<ProjectProxy>>(errorHandler) {
@Override
public void onSuccess(List<ProjectProxy> response) {
view.setProjects(response);
}
});
我认为这应该有用。