Guice: à l'Aide de @Nommé pour créer un objet

À l'aide de Guice, si j'ai

@Inject @Named("light")
Color light;

Je peux utiliser

bind(Color.class).annotatedWith(Names.named("light"))
    .toInstance(new Color("white"));

pour la lier à la couleur blanche si la Couleur constructeur ne nécessite nom de la couleur.

Mais comment puis-je faire si la Couleur constructeur exige également des objets qui sont créés par Guice? Par exemple:

@Inject
public Color(ColorSet colorset, String colorName) {...}

où colorset est de créer à l'exécution, par Guice et n'est pas disponible dans les configurer(){...}.

Je voudrais le faire sans:

  • la création d'une classe/sous-classe pour chaque couleur que j'ai besoin d'injecter (comme WhiteColor)
  • l'aide de la réflexion directement dans mon code
  • de changer mes classes à utiliser ColorFactoy factory; factory.get("light"); au lieu de @Named("light") Color light;

OriginalL'auteur Ali Shakiba | 2012-09-05