Guice Konfigurationsfehler
-
21-08-2019 - |
Frage
Ich versuche, Google Guice mit den @Inject und @Singleton Eigenschaften wie folgt zu verwenden:
ich habe:
- Ein Modul mit einer leeren
configure()
Methode. - Eine Schnittstelle IFoo
- 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.
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.