我很惊讶地看到对象被重新注入的顺序没有确定性行为。
public class Test {
@Inject private Boolean testBool;
@Inject
public void checkNewObject(Boolean testBoolNew) {
if (!testBoolNew.equals(this.testBool)) {
System.out.println("Out of sync!");
} else {
System.out.println("In sync!");
}
}
}
这就是我使用该类的方式:
context.set(Boolean.class, new Boolean(true));
Test test = ContextInjectionFactory.make(Test.class, context);
context.set(Boolean.class, new Boolean(false));
所以,有时我得到输出:
In sync!
In sync!
有时我得到:
In sync!
Out of sync!
这真的不确定吗?还是我只是监督某事?
答案 0 :(得分:1)
文件明确指出注射顺序应为:
@Inject
注释且具有最大可解析参数的公共或受保护构造函数@Inject
注释且具有令人满意的类型的字段@Inject
注释且具有令人满意的参数的方法请参阅:https://wiki.eclipse.org/Eclipse4/RCP/Dependency_Injection#Injection_Order
我不确定,为什么在你的情况下这并不像预期的那样有效。
equals()
如何实现MyContent
?MyContent
和/或@Creatable
@Singleton
进行注释?作为旁注:这是一个实际问题还是一个学术问题?为什么有必要将相同的实例注入字段并注入同一目标实例上的方法?如果要使用字段变量来缓存值,可以从方法中进行设置。
如果您认为这是一个错误,请在此处提交:https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Platform