Chciałbym zastąpić typowe wiązanie, ale zawsze miałem ten sam błąd "No implementation was bound
".Dlaczego pojawia się błąd, gdy próbuję zastąpić ogólne powiązanie z Guice? (TypeLiteral)
Używam roboguice 3.
Oto exemple kodu, który używam:
public interface IParser<I, O> {}
public class Parser1 implements IParser<String, String> {
IParser<String, String> mParser;
@Inject
public Parser1(IParser<String, String> parser) {
mParser = parser;
}
}
public class Parser2 extends Parser1 {
@Inject
public Parser2(IParser<String, String> parser) {
super(parser);
}
}
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<IParser<String, String>>() {}).to(new TypeLiteral<Parser1>() {});
}
}
I tu jest moje stworzenie wtryskiwacz:
RoboGuice.getOrCreateBaseApplicationInjector(this,
RoboGuice.DEFAULT_STAGE,
RoboGuice.newDefaultRoboModule(this),
Modules.override(new MyModule()).with(new AbstractModule() {
@Override
protected void configure() {
bind(new TypeLiteral<IParser<String, String>>() {}).to(new TypeLiteral<Parser2>() {});
}
})
);
Gdybym don” t staraj się go przesłonić (tylko użytkownik Parser1), wszystko jest w porządku, kiedy nadpisuję standardowy obiekt dostawcom, działa to również, ale nie z TypeLiteral.
Mój błąd jest:
com.google.inject.CreationException: Unable to create injector, see the following errors:
1) No implementation for IParser<String, String> was bound.
Co robię źle?
Dzięki.
Czy ktoś ma pojęcia? Czy Aurélien musi dostarczyć więcej informacji? –
Nie mogę odtworzyć tego zachowania w Guice 4. Zauważyłem, że istnieje zależność cykliczna, którą Guice używa jako podkładki klasy proxy do spełnienia. Czy Roboguice może wyłączyć gdzieś proxy? – Cardano
Nota boczna: nigdy nie potrzebujesz 'nowego TypeLiteral() {}', możesz po prostu użyć 'ASimpleType.class' –
Cardano