Frage

Sie erhalten können 2 Singleton Instanzen des gleichen zugrunde liegenden Typ?

Dies ist offensichtlich im Frühjahr trivial, wie es auf benannten Instanzen basiert auf dem Sie einen Rahmen befestigen, aber ich kann das Äquivalent in guice nicht sehen, die über Bindungstypen Implementierungsklassen ist. Beachten Sie, dass ich möchte nicht auf die Instanz zu binden, haben, wie die Instanzen in Frage mit anderen Abhängigkeiten von guice injiziert werden.

War es hilfreich?

Lösung

Es ist einfach zu in Guice! Erstellen Sie zwei abwartend Anmerkungen, sagen @One und @Two und dann

bind(MySingleton.class).annotatedWith(One.class).toInstance(new MySingleton());
bind(MySingleton.class).annotatedWith(Two.class).toInstance(new MySingleton());

und dann

@Inject
public SomethingThatDependsOnSingletons(@One MySingleton s1,
    @Two MySingleton t2) { ... }

Andere Tipps

Ich möchte Marcin Antwort ergänzen, durch das Hinzufügen, dass Sie sich mit toInstance() oder Anbieter Methoden in einer solchen Situation nicht einschränken müssen.

Im Folgenden wird genauso gut funktionieren:

bind(Person.class).annotatedWith(Driver.class).to(MartyMcFly.class).in(Singleton.class);
bind(Person.class).annotatedWith(Inventor.class).to(DocBrown.class).in(Singleton.class);

[...]

@Inject
public BackToTheFuture(@Driver Person marty, @Inventor Person doc) { ... }

Guice werden die Abhängigkeiten wie gewohnt injizieren, wenn die MartyMcFly und DocBrown Klassen instanziieren.


Beachten Sie, dass es auch funktioniert, wenn Sie mehrere Singletons der gleichen Typ binden möchten:

bind(Person.class).annotatedWith(Driver.class).to(Person.class).in(Singleton.class);
bind(Person.class).annotatedWith(Inventor.class).to(Person.class).in(Singleton.class);

Damit dies funktioniert, müssen Sie sicherstellen, dass Person nicht im Singleton Umfang gebunden ist, entweder explizit im Guice-Modul oder mit der @Singleton Anmerkung. Weitere Details in diesem Gist .

Edit: Der Beispielcode ich als ein Beispiel zu geben kommt von einem Guice Grapher-Test . Mit Blick auf der Guice-Tests ist eine gute Möglichkeit, besser zu verstehen, wie die API zu verwenden (was zu jedem Projekt gilt auch gute Unit-Tests).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top