RoboGuice @Inject 注释有效,但 getInjector(this).getInstance() 抛出 ConfigurationException
RoboGuice @Inject annotation works, but getInjector(this).getInstance() throws ConfigurationException
在派生自 RoboActivity 的 Activity 上,我可以添加一个带有 @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);
}
}
我需要使用第二个示例,以便派生 类 可以 return MyType
的不同实例,并且不想离开该字段,因为它可能是错误的以后用。
如何使用 RoboGuice?
当 class 从未通过注释注入时,RoboGuice 认为 class 未绑定并忽略绑定。
要强制绑定,您需要在模块中使用 superbind
而不是简单的 bind
:
public class MyModule extends AbstractModule {
@Override
protected void configure() {
superbind(MyType.class).to(MyTypeImpl.class);
}
}
在派生自 RoboActivity 的 Activity 上,我可以添加一个带有 @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);
}
}
我需要使用第二个示例,以便派生 类 可以 return MyType
的不同实例,并且不想离开该字段,因为它可能是错误的以后用。
如何使用 RoboGuice?
当 class 从未通过注释注入时,RoboGuice 认为 class 未绑定并忽略绑定。
要强制绑定,您需要在模块中使用 superbind
而不是简单的 bind
:
public class MyModule extends AbstractModule {
@Override
protected void configure() {
superbind(MyType.class).to(MyTypeImpl.class);
}
}