2009-09-15 6 views
2

Est-ce que quelqu'un a déjà vu/essayé d'écrire un modèle de localisateur de service qui utilise un système de configuration de style Guice?Localisateur de services Guice

Actuellement, j'ai un projet GWT (ce qui arrive à utiliser GWT-RPC) qui utilise un modèle de commande dans laquelle mon servlet RPC qui ressemble à ceci ...

public interface TransactionService extends RemoteService { 

    <T extends Response> T execute(Action<T> action); 
} 

Dans ma mise en œuvre actuelle de la méthode d'exécution Je fais ceci ...

if(action instanceof SomeActionImpl){ 
    doSomeActionImpl((SomeActionImpl)action); 
}else if(action instanceof SomeActionImpl2){ 
    doSomeActionImpl2((SomeActionImpl2)action); 
} 

Ce que je voudrais faire est de trouver un moyen de se débarrasser de l'instruction si géant. J'aurais besoin d'un moyen d'enregistrer que la classe d'ActionImpl1 devrait être déléguée à une autre implémentation de TransactioNService.

Des idées? Je pensais juste ajouter des entrées à un HashMap où la clé est la classe de l'action et la valeur est la classe de ServiceImpl. Un que j'ai une référence à la classe ServiceImpl je pourrais utiliser Guice pour obtenir une instance de TransactionService.

+0

Vous ne pouvez pas utiliser Bind pour cela? (http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/Binder.html) – Margus

+0

Lier serait pour dire Lier ce type à cette implémentation de ce type. – benstpierre

Répondre

2

Jetez un oeil à la classe net.customware.gwt.dispatch.server.DefaultActionHandlerRegistry dans gwt-dispatch (http://code.google.com/p/gwt-dispatch/); il fait exactement ce que vous suggérez. Voici la variable membre qui stocke les gestionnaires:

privée finale Carte < Classe <? étend l'action <? > >, ActionHandler <?,? > > manipulateurs;

Si vous souhaitez exécuter les gestionnaires côté serveur, utilisez les composants côté serveur gwt-dispatch; Si c'est du côté client, pensez à modéliser votre classe de dispatching sur DefaultActionHandlerRegistry.

Questions connexes