2017-01-25 1 views
0

Die folgende Karte Bindemittel Bindung gibt mir ein com.google.inject.OutOfScopeException: Nicht in MyScope:In Guice, Erstellen einer Map-Binder-Singleton-Bindung, die eine andere Bereichsabhängigkeit hat?

mapbinder.addBinding("ferrari").to(Ferrari.class).in(Singleton.class); 

Ich vermute, dies ist wahrscheinlich, weil der Konstruktor von Ferrari Abhängigkeit von einem Objekt hat, die mit @ bezeichnet ist MyScope. Wie kann ich in einem solchen Fall einen Ferrari Singleton erstellen?

Ich weiß, dass (how to create an object from a different scope), um ein Objekt mit unterschiedlichem Umfang zu erstellen, benötigen wir Provider. Wenn das der Fall ist, was sollte ich in der Get-Methode von FerrariProvider schreiben, damit es mir immer die selbe Instanz von Ferrari zurückgibt? Wie kann ich einen Ferrari Singleton erstellen, der von einem Objekt in einem anderen Bereich abhängt?

Antwort

0

Sie können die Singleton-Annotation zu Ihrem Provider hinzufügen und das Ergebnis der Get-Methode in einem Feld zwischenspeichern und zurückgeben. Jedes Mal, wenn der Provider aufgerufen wird, wird das gleiche Objekt zurückgegeben. Sie können Abhängigkeiten auch unabhängig von ihren Gültigkeitsbereichen in Ihrem Provider einfügen.

Verwandte Themen