Disons que j'ai un module:
Module extends AbstractModule
{
@Override
protected void configure()
{
bind(String.class).
annotatedWith(Names.named("annotation")).
toInstance("DELIRIOUS");
}
}
et je veux tester le module et vérifier s'il injecte la bonne valeur dans un champ String
annoté avec Names.named("annotation")
sans avoir une classe et un champ mais en obtenant la valeur directement de l'injecteur:
@Test
public void test()
{
Injector injector = Guice.createInjector(new Module());
// THIS IS NOT GOING TO WORK!
String delirious = injector.getInstance(String.class);
assertThat(delirious, IsEqual.equalTo("DELIRIOUS");
}
injector.getInstance(Key.get(String.class, Names.named("annotation")));
J'utilise la méthode suivante
public <T> T getInstance(Class<T> type, Class<? extends Annotation> option) {
final Key<T> key = Key.get(type, option);
return injector.getInstance(key);
}
pour ça. En général, vous avez toujours le problème de créer l'instance d'annotation, mais ici Names.named("annotation")
fonctionne.