注入匿名内部课程(杜松子酒)
-
12-11-2019 - |
题
我有这样的东西:
request.findAllProjects().fire(new ExtReceiver<List<ProjectProxy>>() {
@Override
public void onSuccess(List<ProjectProxy> response) {
view.setProjects(response);
}
});
.
它是抽象类简档的匿名内部类。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);
}
}
.
我明白为什么这不能工作,因为我使用新的运算符。但我怎么能做到这样的事情。我想拥有那个匿名的课程,并没有把它放在自己的文件中。 我怎么能注射该错误句柄?思考静态意见,但它看起来像这样不起作用(也许是因为我创建了匿名类的继承)
在与普通guice相反,我不知道injector.getInstance()呼叫。
信息:这是一个请求等要求
解决方案
为什么不将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);
}
}
为您的错误负责类声明一个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);
}
});
我认为这应该是工作。