Guice: Verwendung von @Named Objekt erstellen
Verwendung von Guice, wenn ich
@Inject @Named("light")
Color light;
Kann ich verwenden
bind(Color.class).annotatedWith(Names.named("light"))
.toInstance(new Color("white"));
binden, es zur weißen Farbe, wenn Farbe-Konstruktor benötigt nur Farbe, name.
Aber wie kann ich es machen, wenn die Farbe Konstruktor erfordert auch Objekte, die erstellt werden von Guice? Zum Beispiel:
@Inject
public Color(ColorSet colorset, String colorName) {...}
wo colorset ist zur Laufzeit erstellen von Guice und nicht in configure(){...}.
Ich möchte es tun, ohne:
- erstellen einer Klasse/Unterklasse für jede Farbe, die ich brauche, um zu injizieren (wie WhiteColor)
- mit der spiegelung direkt in meinen code
- die änderung meiner Klassen zu verwenden
ColorFactoy factory; factory.get("light");
statt@Named("light") Color light;
InformationsquelleAutor Ali Shakiba | 2012-09-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der beste Weg, dies zu tun, ist nicht mit einer Fabrik aber mit
@Liefert
Methoden. Meine Firma verwendet Guice sehr, sehr ausgiebig, undrequestInjection
ist immer eine schlechte Idee, weil es einfach sehr zerbrechlich graph der impliziten Abhängigkeiten.Hier ist, was es Aussehen sollte:
Das ist hilfreich - keine Ahnung, wie Sie verwenden können, ein Guice-injector zu bekommen, entweder von den Instanzen? Auf der Suche nach etwas wie
Guice.createInjector(FooModule).getInstance(Color.class)
aber mit einer Spezifikation von "weiß" oder "schwarz"..Ich bin mir nicht sicher, wie Sie es tun würde, mit @Benannt, aber Sie sollten mit binding-Annotationen (github.com/google/guice/wiki/BindingAnnotations) sowieso. Dann könnte man sagen-Injektor.getInstance(Key.get(Color.class, Black.class)) (obwohl ich möglicherweise fehlt eine generische Typ-Angabe in dort irgendwo). getInstance(...) überlastet ist, um auch einen Key (google.github.io/guice/api-docs/latest/javadoc/index.html?com/...), nicht nur eine Klasse.
InformationsquelleAutor Michael Davidson
Könnte man einrichten einer Fabrik innerhalb des Moduls, und Anfrage Injektion auf, die es zu füllen in der ColorSet.
Modul:
ColorFactory:
Ja, viele von Ihnen!
Können Sie klären Ihre Nutzung der ColorSet?
Das ist nur ein Vereinfachtes Beispiel der realen situation. Es ist nicht ein colorset, es ist ein Diagramm von Objekten angelegt und verbunden durch guice.
Sind Ihre Farben als unveränderlich?
InformationsquelleAutor John Ericksen