Mam następujący kod za pomocą wiązań Guice:Guice: Wiązanie kilku obiektów z różnymi zależnościami
public class MyApplication {
public static void main(String[] args) {
Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(Foo.class).annotatedWith(Names.named("first")).toInstance(new Foo("firstFoo"));
bind(Foo.class).annotatedWith(Names.named("second")).toInstance(new Foo("secondFoo"));
bind(Bar.class).to(BarImpl.class);
bind(MyApplication.class).asEagerSingleton();
}
});
}
private @Named("first") Bar first;
private @Named("second") Bar second;
static @Value class Foo { String name; }
static interface Bar {}
static class BarImpl implements Bar {
@Inject @Named Foo foo;
}
}
próbuję dostać Bar
obiekt dla obu wymienionych Foo
s wstrzykiwane w mojej aplikacji. Zasadniczo powinien jakoś połączyć @Named
na Foo
z tym na Bar
. Wypróbowałem kilka rozwiązań, od umieszczenia @Named
na wszystkim, aż po napisanie niestandardowego Provider
. Ten ostatni nie działał, ponieważ nie mam dostępu do wartości adnotacji @Named
wewnątrz dostawcy. Myślę, że rozwiązanie jest gdzieś w linii bind(Bar.class).to(BarImpl.class);
, nakazujące zapamiętać wartość adnotacji @Named
.
Moje pytanie brzmi, czy to w ogóle możliwe, a jeśli tak, to w jaki sposób?
Dzięki, to wygląda obiecująco. Wypróbuję to w poniedziałek. – Jorn
Tak, to rozwiązało mój problem. Dzięki jeszcze raz! – Jorn
Nie ma za co! –