nehme ich an einen Dritten Klasse wie folgt:Wie kann ich eine nicht unterstützte Abhängigkeit unterstützen?
public class MyObject {
@Inject
public MyObject(Foo foo, Bar bar) { ... }
}
Nehmen wir nun an, dass ich eine Fabrik Schnittstelle wie so haben:
public interface MyObjectFactory {
public MyObject build(Bar bar);
}
Die Idee ist, dass ich eine MyObjectFactory
haben wollen, dass eine baut MyObject
für eine feste Foo
- das heißt, im Wesentlichen die @Assisted
Annotation auf dem Bar
Konstruktor Parameter von außen hinzufügen. Natürlich manuell MyObjectFactory
Umsetzung ist immer möglich:
public class MyObjectFactoryImpl implements MyObjectFactory {
@Inject private Provider<Foo> foo;
@Override
public MyObject build(Bar bar) { return new MyObject(foo.get(), bar); }
}
Aber lassen Sie uns sagen, dass es Bedingungen gibt, die mich erfordern MyObject
Instanzen Guice bauen haben - zum Beispiel Verfahren Abfangjäger. Dies scheint wie ein Job für „Einspritzen des Injektors“:
public class MyObjectFactoryImpl implements MyObjectFactory {
@Inject private Injector injector;
@Override
public MyObject build(Bar bar) {
Injector child = injector.createChildInjector(new AbstractModule() {
@Override
protected void configure() {
bind(Bar.class).toInstance(bar);
// Set up method interceptors for MyObject here...
}
});
return child.getInstance(MyObject.class);
}
}
Das klingt böse und Kessel-Platte-y, so frage ich mich, ob es irgendwelche alternative Implementierungen und/oder eine Möglichkeit zu haben, Guice die Erzeugung Fabrikimpl.
Da 'MyObject' ein Drittanbieter ist, kann ich' MyObject' nicht ändern; Sonst wäre ich in der Lage, einfach die alte assistierte Injektion zu verwenden. –
Wickeln Sie es in ein anderes Objekt. –