Frage

Ich versuche, Google Guice mit den @Inject und @Singleton Eigenschaften wie folgt zu verwenden:

ich habe:

  1. Ein Modul mit einer leeren configure() Methode.
  2. Eine Schnittstelle IFoo
  3. Eine Klasse Foo (implementierende IFoo), mit @Singleton kommentierte, mit einem Parameter losen Konstruktor mit @Inject kommentiert. Dies ist der einzige kommentierte Konstruktor.

Die Klassen, Konstruktor und Schnittstelle sind öffentlich, und immer noch die folgende Fehlermeldung erhalte ich:

  

Keine Umsetzung für IFoo gebunden wurde.

War es hilfreich?

Lösung

Sie meinen, Sie den Fehler erhalten, wenn dies zu tun?

IFoo foo = injector.getInstance(IFoo.class);

Na, dann ist es offensichtlich. Wenn die configure() leer ist, wie sollte mit Guice wissen, welche Klasse die Abhängigkeit für IFoo gerecht zu werden.

Fügen Sie einfach diese in der configure() Methode und es sollte funktionieren. Jetzt guice weiß, mit welcher Klasse der Abhängigkeit zu erfüllen.

bind(IFoo.class).to(Foo.class);

Wenn Sie dies nicht in dem Modul konfigurieren möchten, können Sie die Schnittstelle mit Anmerkungen versehen. z.

@ImplementedBy(Foo.class)
public interface IFoo {
  ...
}

Die @Singleton Anmerkungen sagt nur guice die gleiche Instanz für die Klasse (das Singleton Pattern) jedes Mal eine Anforderung für die Klasse zurückzukehren über Injector.getInstance() gemacht wird, anstatt jedes Mal eine neue Instanz zu schaffen. Aber beachten Sie, dass dies nur ein Singleton pro Injector eher dann pro Classloader.

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