匿名の内部クラス(GIN)に注射する
-
12-11-2019 - |
質問
私はこのようなものを持っています:
request.findAllProjects().fire(new ExtReceiver<List<ProjectProxy>>() {
@Override
public void onSuccess(List<ProjectProxy> response) {
view.setProjects(response);
}
});
.
抽象クラスの匿名の内部クラスです。ExtraCeiverは、提供したい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);
}
}
.
新しい演算子を使用するので、これが機能できない理由を理解しています。しかし、どうやってこのようなことをすることができますか。私はその匿名クラスを持ち、それを自分のファイルか何かに置きたいです。 どのように私はそのエラーハンドラーを挿入することができますか?除電について考えたが、このように見えているように見えた(たぶん私が匿名クラスをして作成した継承のために)
通常のガスとは反対側のInjector.GetInstance()呼び出しを知りません。
情報の場合:それはrequestFactory Call です。
解決
抽象クラスのコンストラクタにErrorHandlerパラメータを入力しない代わりに別のSetErrorHandlerセッターを作成します。
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);
}
});
これが働くべきだと思います。