Die Injektion bestimmten Instanz mit Guice
Ich habe ein paar Probleme mit dem Einspritzen einer bestimmten Feld-Instanz mit Guice.
Hier ist, was ich derzeit habe:
class Driver {
private ThreadLocal<Database> db;
...
}
Würde ich in der Regel einfach die db-instance in einem Konstruktor. Aber dieser Klasse abgefangen werden, mit guice.
Hier ist das Modul:
class MyGuiceModule extends AbstractModule {
private ThreadLocal<Database> dbToInject;
public MyGuiceModule(ThreadLocal<Database> dbToInject) {
this.dbToInject = dbToInject;
}
@Override
protected void configure() {
//Binds the interceptor.
bindInterceptor(....);
bind(ThreadLocal.class).toInstance(this.dbToInject);
}
}
Und hier ist, wie ich bin instanziieren von all dem Zeug:
Injector injector = new Injector(new MyGuiceModule(db));
Driver driver = injector.getInstance(Driver.class);
Ich Wette, es ist ziemlich offensichtlich, aber was mache ich hier falsch?
EDIT:
Sorry wenn ich nicht klar. Mein problem ist, dass dies nicht funktioniert. Die Instanz wird nicht eingespritzt wird. Ich habe kommentiert das Feld mit @Inject und funktioniert immer noch nicht.
- Warum nicht einen
Driver
Konstruktor versehen mit@Inject
? - Was ist das genaue problem, das Sie haben?
- Bekommst du eine Fehlermeldung? Wollen Sie, den code zu verbessern? Es ist nicht klar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie brauchen, um zu verwenden Guice.createInjector erstellen ein Injektor Instanz.
Hier ist, wie ich es schaffen würde, einen Injektor:
Andere Sache ist, dass Sie verwendet den folgenden code, um verbindlich:
In der Regel, es wäre so etwas wie:
Ihre ThreadLocal.class ist nicht eine interface-Klasse, und diese.dbToInject ist nicht deine Umsetzung Klasse.
Hier ist die Dokumentation:
http://code.google.com/p/google-guice/wiki/Motivation
Hoffe, das hilft.
Wäre es wahrscheinlich besser, nicht zu injizieren, die
ThreadLocal
direkt, sondern zu injizieren, die Datenbank in den Konstruktor (wie @Tobias vorgeschlagen). Und wollen Sie wirklich verwenden die gleiche Datenbank für die Instanz des Treibers erzeugt werden (Hinweis: der optionale singleton in den Kommentar)?