在源自RoboActivity的活动中,我可以添加一个@Inject
注释的成员,该注释是在super.onCreate()
内调用onCreate()
之后填充的;但是,如果我删除该字段并尝试从方法中检索相同类型的对象,RoboGuice会抛出ConfigurationException
。
有效的示例代码:
public class MyActivity extends RoboActivity {
@Inject private MyType instance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// instance is set
}
}
但是,此示例不起作用:
public class MyActivity extends RoboActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
doStuffThatCalls_getMyType_Eventually();
}
protected MyType getMyType() {
// Exception thrown here
return RoboGuice
.getInjector(this)
.getInstance(MyType.class);
}
}
此外,如果我添加字段,那么我可以像以前一样使用getInstance()
:
public class MyActivity extends RoboActivity {
@Inject
private MyType instance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
doStuffThatCalls_getMyType_Eventually();
}
protected MyType getMyType() {
// This now works (of course, returns different instance of 'MyType')
return RoboGuice
.getInjector(this)
.getInstance(MyType.class);
}
}
我需要使用第二个示例,以便派生类可以返回MyType
的不同实例,并且不希望离开该字段,因为它可能在将来被错误地使用。
我怎样才能像这样使用RoboGuice?
答案 0 :(得分:0)
当一个类从未通过注释注入时,RoboGuice认为该类没有绑定并忽略该绑定。
要强制绑定,您需要在模块中使用superbind
而不是简单bind
:
public class MyModule extends AbstractModule {
@Override
protected void configure() {
superbind(MyType.class).to(MyTypeImpl.class);
}
}