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

Schreibe einen Kommentar