Ich habe zwei Klassen von Drittanbietern, die beide eine Implementierung einer Authorizer
Schnittstelle übernehmen. Ich muss jeder mit einer anderen Implementierung injizieren.Guice: injizieren unterschiedliche Implementierung je nachdem wer es bekommt?
Wenn ich eine @Provides
mache, wie kann ich es implementieren, so dass es die zur Laufzeit erforderliche Implementierung bietet? Der Anbieter hat keine Ahnung, wer nach der Injektion fragt.
In der Theorie könnte ich @Named
verwenden, aber ich kann den Code, der injiziert wird, nicht ändern. Ich möchte wie etwas tun:
bind(Authorizer.class).to(ImplA.class).for(SomeClass.class)
bind(Authorizer.class).to(ImplB.class).for(SomeOtherClass.class)
Offensichtlich ist die „für“ Code existiert nicht, aber gibt es einige gleichwertige Art und Weise, dies zu tun?
Haben Sie bei http://stackoverflow.com/questions/8046805/guice-and-interface-that-has-multiple-implementations sah – Bajal
'@ Named' und andere Bindungs Anmerkungen sind so, wie Sie sind soll damit umgehen. –
Leider erfordern beide Lösungen eine Annotation des Code, der injiziert wird, was ich, wie ich bereits erwähnte, nicht tun kann (sie stammen von Drittanbieter-Jars). –