java - 无需注入(inject)即可获得 e4 服务

标签 java eclipse rcp e4

我正在尝试调整 Eclipse RCP 3.x 应用程序以使用 e4 中的某些功能。因此,没有 e4xmi 文件。

特别是,我需要访问某些服务:

public class RunModeService {

@Inject
private static ECommandService commandService;
@Inject 
private static EHandlerService handlerService;

...
}

看起来,如果我自己实例化类(正如我正在做的那样),则不会发生任何注入(inject)。

是否可以通过其他方式获得这些服务?如果是这样,我可以开始 Hook 到 e4 和 DI,方法是创建一个命令,其处理程序由框架实例化并在其中发生注入(inject)。

最佳答案

如果您有 IEclipseContext,您可以使用以下方法获取对象:

ECommandService commandService = eclipseContext.get(ECommandService.class);

IEclipseContext 可以注入(inject)。

您可以使用 ContextInjectionFactory 创建您自己的对象,它将为您的对象执行 DI:

MyClasss myClass = ContextInjectionFactory.make(MyClass.class, eclipseContext);

或者您可以使用以下方法对现有类实例进行注入(inject):

ContextInjectionFactory.inject(myClass, eclipseContext);

在 View 或编辑器中,您可以使用以下方法从 View /编辑器站点获取 Eclipse 上下文:

eclipseContext = ((PartSite)getSite()).getContext();

但是 PartSite 是一个内部类,所以真的不应该使用它。

关于java - 无需注入(inject)即可获得 e4 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23992497/

相关文章:

java - 安装 WAS 8.5 插件后 Eclipse 市场无法运行

java - Eclipse RCP : move createPartControl into background

java - 如何编写 JUnit 测试用例来测试线程和事件

java - libGDX Box2DDebugRenderer 绘制框太大和太小

java - 为什么 MyClass 中的默认构造函数调用 Object 类的 super 即

java - 如何在 Linux/Debian 上将目录包含到 java.library.path?

java - 在 eclipse 中使用 OWL API 检索个人的数据属性

java - AsyncTask 得到一个错误的字符串参数

java - StringBuilder vs.concat vs. "+"运算符在 eclipse 中的相对性能与命令行不同?

.Net : main resources, 用于构建企业级应用程序的工具和库(开源与否)?