我想覆盖泛型类型绑定,但我总是得到相同的" No implementation was bound
"错误.
我正在使用roboguice 3.
这是我使用的代码示例:
public interface IParser {} public class Parser1 implements IParser{ IParser mParser; @Inject public Parser1(IParser parser) { mParser = parser; } } public class Parser2 extends Parser1 { @Inject public Parser2(IParser parser) { super(parser); } } public class MyModule extends AbstractModule { @Override protected void configure() { bind(new TypeLiteral >() {}).to(new TypeLiteral () {}); } }
这是我的注射器创建:
RoboGuice.getOrCreateBaseApplicationInjector(this, RoboGuice.DEFAULT_STAGE, RoboGuice.newDefaultRoboModule(this), Modules.override(new MyModule()).with(new AbstractModule() { @Override protected void configure() { bind(new TypeLiteral>() {}).to(new TypeLiteral () {}); } }) );
如果我不尝试覆盖它(只有用户Parser1),一切都很好,当我用提供者覆盖标准对象时,它也可以很好地工作,但不能用于TypeLiteral.
我的错误是:
com.google.inject.CreationException: Unable to create injector, see the following errors: 1) No implementation for IParserwas bound.
我究竟做错了什么?
谢谢.
您应该更改实现接口的类的定义.
试试这个:
public class Parser1 implements IParser { } public class Parser2 extends Parser1 { }
然后,您可以通过以下方式将您的接口绑定到类:
bind(new TypeLiteral>() {}).to(new TypeLiteral () {});