Tôi muốn ghi đè ràng buộc kiểu chung, nhưng tôi allways có cùng một lỗi "No implementation was bound
".Tại sao tôi gặp lỗi khi cố gắng ghi đè ràng buộc chung với Guice? (TypeLiteral)
Tôi đang sử dụng roboguice 3.
Dưới đây là một ví dụ của mã mà tôi sử dụng:
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>() {});
}
}
Và đây là sự sáng tạo injector của tôi:
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>() {});
}
})
);
Nếu tôi don' t cố gắng ghi đè lên nó (chỉ người dùng Parser1), tất cả là tốt, khi tôi ghi đè lên đối tượng tiêu chuẩn với các nhà cung cấp, nó hoạt động tốt quá, nhưng không phải với TypeLiteral.
lỗi của tôi là:
com.google.inject.CreationException: Unable to create injector, see the following errors:
1) No implementation for IParser<String, String> was bound.
Tôi đang làm gì sai?
Cảm ơn.
Có ai có một đầu mối? Aurélien có cần cung cấp thêm thông tin không? –
Tôi không thể tái tạo hành vi này theo Guice 4. Tôi sẽ lưu ý rằng có một phụ thuộc vòng tròn, mà Guice đang sử dụng một shim lớp proxy để đáp ứng. Roboguice có thể vô hiệu hoá proxy ở đâu đó không? – Cardano
Lưu ý phụ: bạn không bao giờ cần 'Loại mớiLọc() {}', bạn chỉ có thể sử dụng 'ASimpleType.class' –
Cardano