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
Vous devez vous connecter pour publier un commentaire.
La meilleure façon de le faire n'est pas une usine mais avec
@Fournit
méthodes. Mon entreprise utilise Guice très, très largement, etrequestInjection
est toujours considéré comme une mauvaise idée, car il peut facilement configurer un très fragiles graphe de dépendances implicites.Voici à quoi il devrait ressembler à:
C'est utile - il une idée de comment vous pouvez utiliser un Guice injecteur pour obtenir soit des instances? À la recherche de quelque chose comme
Guice.createInjector(FooModule).getInstance(Color.class)
mais avec un cahier des charges de "blanc" ou "noir"..Je ne suis pas sûr de savoir comment vous le feriez avec @Nommé, mais vous devriez être en utilisant la liaison des annotations (github.com/google/guice/wiki/BindingAnnotations) de toute façon. Alors on pourrait dire de l'injecteur.getInstance(Clé.get(Color.class, Black.class)) (même si j'ai peut-être manquant un type générique de spécification, quelque part). getInstance(...) est surchargé de prendre également une Touche (google.github.io/guice/api-docs/latest/javadoc/index.le html?com/...), et pas seulement une classe.
OriginalL'auteur Michael Davidson
Vous pourriez installer une usine dans le module, et demande injection pour remplir le ColorSet.
Module:
ColorFactory:
Oui beaucoup d'entre eux!
Pouvez-vous préciser votre utilisation de ColorSet?
C'est juste un exemple simplifié de la situation réelle. Il n'y a pas un colorset, il y a un graphe d'objets créés et reliés par guice.
Sont vos couleurs considéré comme immuable?
OriginalL'auteur John Ericksen