Genel bir tür bağlamayı geçersiz kılmak istiyorum, ancak her zaman "No implementation was bound
" hatasını aldım. Ben roboguice İşte 3.Guice ile genel bir bağlamayı geçersiz kılmaya çalışırken neden bir hata yaşıyorum? (TypeLiteral)
kullanıyorum
kullandığım kod exemple geçerli:
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>() {});
}
}
Ve işte benim enjektör yaratılmasıdır:
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>() {});
}
})
);
Ben etmezsen' Sağlayıcıyı (yalnızca kullanıcı Parser1) geçersiz kılmaya çalışın, her şey yolunda, standart nesneyi sağlayıcılarla geçersiz kıldığımda, çok iyi çalışır, ancak TypeLiteral ile çalışmaz.
Benim hatadır: Neyi yanlış yapıyorum
com.google.inject.CreationException: Unable to create injector, see the following errors:
1) No implementation for IParser<String, String> was bound.
?
Teşekkürler.
herkes bir ipucu var mı? Aurélien'in daha fazla bilgi sağlaması gerekiyor mu? –
Bu davranışı Guice 4 altında yeniden oluşturamıyorum. Guice'nin, tatmin edecek bir proxy sınıfı shim kullandığı döngüsel bir bağımlılık olduğunu hatırlatırım. Roboguice proxy'leri bir yerde devre dışı bırakabilir mi? – Cardano
Yan nota: Yeni TypeLiteral() {} 'ye hiç gerek yok, sadece' ASimpleType.class' –
Cardano