2010-09-16 4 views
0

J'essaie d'injecter une carte dans une classe en utilisant Guice où la carte a la forme Map<MyInterface, Integer>.Injecter la clé dans MapBinder

Je souhaite utiliser l'extension MapBinder pour cela, mais il semble que MapBinder nécessite un objet instancié pour la clé. Je voudrais que Guice injecte des instanciations de la clé, car ce sont des objets complexes qui nécessitent des injections de leur part. I.e, quelque chose comme:

MapBinder<MyInterface, Integer> mapBinder = 
    MapBinder.newMapBinder(binder(), MyInterface.class, Integer.class); 
mapBinder.addBinding(MyInterfaceImpl1.class).to(5); 
mapBinder.addBinding(MyInterfaceImpl2.class).to(6); 

Ceci est illégal, car addBinding attend une instance de la classe. Je sais que je pourrais changer l'ordre des objets dans la carte, mais les valeurs entières ne sont pas uniques alors je me retrouverais avec un Map of Integer -> List, qui est plutôt moche. Quelqu'un a des idées?

Répondre

1

MapBinder ne fonctionne pas pour vous. Le mappage va des clés statiques aux valeurs fournies, pas l'inverse. Peut-être qu'une description plus concrète de ce que vous essayez de faire aiderait à trouver une solution.

En outre, jetez un oeil à Multiset pour mapper un type à un entier. Je ne suis pas sûr si vous modélisez un compte ou non, mais il semble que cela puisse convenir à ce que vous essayez de faire.

+0

Ok, merci. C'est ce que j'ai supposé, mais je me suis dit que ça valait le coup de vérifier si quelqu'un avait une autre idée. Je pense que j'ai trouvé une solution différente qui fonctionnera pour moi. –

Questions connexes