Pregunta

Tengo algo como esto:

request.findAllProjects().fire(new ExtReceiver<List<ProjectProxy>>() {

    @Override
    public void onSuccess(List<ProjectProxy> response) {
        view.setProjects(response);                     
    }
});

Es una clase interna anónima del extrecepista de clase abstracta.El Extreceiver es para manejar los errores con un Mandador de errores que quiero proporcionar.

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);
    }

}

Entiendo por qué esto no puede funcionar, porque utilizo el nuevo operador.Pero, ¿cómo podría hacer algo así?Quiero tener esa clase anónima y no lo ponga en un archivo propio o algo así. ¿Cómo podría inyectar ese error de error?Pensó en las estadísticas, pero parecía que esto no funciona también (tal vez debido a la herencia que creo con hacer una clase anónima)

En el opuesto a la normalidad, no conozco un inyector.getInstance () Llamada.

Para obtener información: esa es una llamada requerida

¿Fue útil?

Solución

¿Por qué no coloca el parámetro de error de error en el constructor de su clase abstracta, en su lugar, creando un setter SetErrorHandler separado, algo así:

public abstract class ExtReceiver<T> extends Receiver<T> {

    private ErrorHandler errorHandler;

    @Inject
    public ExtReceiver(ErrorHandler errorHandler) {
         this.errorHandler = errorHandler;
    }

}

declara los enlaces:

public class MyClientModule extends AbstractGinModule {
  protected void configure() {
    bind(ErrorHandler.class).in(Singleton.class);
  }
}

Declare un ginectory para su clase de errores que anoten con el módulo:

@GinModules(MyClientModule.class)
public interface MyErrorHandlerInjector extends Ginjector {
  ErrorHandler getErrorHandler();
}

y luego usalo así:

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);

        }           
    });

creo que esto debería funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top