我从E3应用程序迁移到纯E4时出现了另一个问题。
我有一个从AbstractRootEditor到FormRootEditor到SashCompositeSubView到TableSubView的调用序列。 在那里我想使用我的EMenuService,但由于它不能被注入它是null。
AbstractRootEditor是唯一连接到应用程序模型的类(作为MPartDescriptor创建的MPart)。
我想在AbstractSubView中注入EMenuService,否则我需要通过我的所有类来运行服务。但我没有IEclipseContext,因为我的AbstractSubView没有与应用程序模型连接(我吗?)。
我有没有机会在AvstractSubView中注入服务?
编辑: 我注意到在我的AbstractSubView中注入这个不可能(?),所以我试着将它放入我的TableSubView中。
gregs评论后我想显示一些代码: 在AbstractRootEditor中:
@PostConstruct
public final void createPartControl(Composite parent, @Active MPart mPart) {
...
ContextInjectionFactory.make(TableSubView.class, mPart.getContext());
首先我得到一个Exception,说我的TableSubView.class有一个无效的构造函数,所以现在构造函数有:
public TableSubView() {
this.tableInputController=null;
}
以及我的Field-Injection:
@Inject EMenuService eMenuService
这有点不起作用,eMenuService仍为空
答案 0 :(得分:1)
如果使用ContextInjectionFactory
创建对象,则会注入它们。使用:
MyClass myClass = ContextInjectionFactory.make(MyClass.class, context);
其中context
是IEclipseContext
(所以你必须从Eclipse注入的每个类开始执行此操作)。
还有一个秒版本ContextInjectionFactory.make
,它允许您提供两个上下文,第二个版本是一个临时上下文,可以包含其他值。