RCP - 应用程序没有活动 window
RCP - Application does not have an active window
在自定义服务中获取非陈旧 EPartService/EModelService/MApplication 引用的最佳方法是什么?我知道它可以通过 @Execute 方法在 Handler 内部完成,但我没有在自定义服务 class 中看到这样做的方法。任何帮助将不胜感激。
@Singleton
@Creatable
public class MyService {
@Inject
private EPartService partService;
@Inject
private EModelService modelService;
@Inject
private MApplication application;
@Inject
public MyService(final IEclipseContext context) {
context.set(MyService.class.getName(), this);
}
public void doWork(){
// Application does not have an active window
}
}
使用活动叶上下文:
IEclipseContext activeContext = application.getContext().getActiveLeaf();
EPartService partService = activeContext.get(EPartService.class);
我认为模型和零件服务实际上没有变化,所以只使用 application.getContext()
应该也可以。
应用对象不变。
发生此问题的原因是为每个 window 创建了 EPartService,并且当您将服务注释为 @Singleton EPartService 时仅注入到您的服务一次,而当您更改时 window EPartService 未更新。所以去掉注解@Singleton就一切OK了
在自定义服务中获取非陈旧 EPartService/EModelService/MApplication 引用的最佳方法是什么?我知道它可以通过 @Execute 方法在 Handler 内部完成,但我没有在自定义服务 class 中看到这样做的方法。任何帮助将不胜感激。
@Singleton
@Creatable
public class MyService {
@Inject
private EPartService partService;
@Inject
private EModelService modelService;
@Inject
private MApplication application;
@Inject
public MyService(final IEclipseContext context) {
context.set(MyService.class.getName(), this);
}
public void doWork(){
// Application does not have an active window
}
}
使用活动叶上下文:
IEclipseContext activeContext = application.getContext().getActiveLeaf();
EPartService partService = activeContext.get(EPartService.class);
我认为模型和零件服务实际上没有变化,所以只使用 application.getContext()
应该也可以。
应用对象不变。
发生此问题的原因是为每个 window 创建了 EPartService,并且当您将服务注释为 @Singleton EPartService 时仅注入到您的服务一次,而当您更改时 window EPartService 未更新。所以去掉注解@Singleton就一切OK了