Question

J'ai quelque chose comme ça:

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

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

C'est une classe intérieure anonyme de la classe abstraite Extreceiver. L'Extreceiver est pour gérer les erreurs avec un Handhandler d'erreur que je veux fournir.

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

}

Je comprends pourquoi cela ne peut pas fonctionner, car j'utilise le nouvel opérateur. Mais comment pourrais-je faire quelque chose comme ça. Je veux avoir cette classe anonyme et ne pas le mettre dans un propre fichier ou quelque chose. Comment pourrais-je injecter ce Handhandler d'erreur? Pensé à Staticinjections, mais il semblait que cela ne fonctionne pas aussi (peut-être à cause de l'héritage que je crée en faisant un cours anonyme)

Dans l'opposé de Guice normal, je ne connais pas un appel injecteur.getInstance ().

Pour plus d'informations: c'est un appel de demande

Était-ce utile?

La solution

Pourquoi ne placez-vous pas le paramètre ErrorHandler dans le constructeur de votre classe abstrait à la place d'un secteur SetErrorHandler séparé, quelque chose comme ceci:

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

    private ErrorHandler errorHandler;

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

}

Déclarer les liaisons:

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

Déclarez un ginjector pour votre classe d'erreurhandler l'annotation avec le module:

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

Et puis utilisez-le comme ceci:

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

        }           
    });

Je pense que cela devrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top