Domanda

Ho qualcosa di simile:

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

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

È la classe interiore anonima della classe astratta Extreceiver.L'extreceiver è per la gestione degli errori con un errore che voglio fornire.

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

}
.

Capisco perché questo non può funzionare, perché uso il nuovo operatore.Ma come potrei fare qualcosa del genere.Voglio avere quella classe anonima e non metterlo in un proprio file o qualcosa del genere. Come potrei iniettare quell'errore?Pensiero sulle statiche delle statiche, ma sembrava che questo non funziona anche (forse a causa dell'eredità che creo con una classe anonima)

Nel contrario alla normale Guice non conosco un invito a iniettore.Geinstance ().

Per informazioni: questa è una chiamata di richiesta

È stato utile?

Soluzione

Perché non inserisci il parametro ErrorHandler nel costruttore della classe astratta invece creando un setter Setter SetErrorHandler, qualcosa del genere:

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

    private ErrorHandler errorHandler;

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

}
.

Dichiarare i Binding:

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

Dichiarare un Ginjector per la tua classe Error Error ErrorNating IT con il modulo:

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

e quindi usalo come questo:

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

        }           
    });
.

Penso che questo dovrebbe funzionare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top