Eclipse rcp 在Eclipse4RCP2.0中,服务/源提供者是如何工作的?

Eclipse rcp 在Eclipse4RCP2.0中,服务/源提供者是如何工作的?,eclipse-rcp,e4,Eclipse Rcp,E4,我一直忙于未来,将一个旧的Eclipse3.7应用程序迁移到Eclipse4,虽然我对移植所有视图的应用程序模型感到满意,但我有许多源代码提供者,我不确定是否需要移植。我一直在使用Eclipse4上的一些教程,包括但没有一个涵盖这个特定元素 对于少量的上下文,我现有的应用程序有几个扩展AbstractSourceProvider的类,这些类在org.eclipse.ui.services扩展点中注册。我的视图使用工作台中的ISourceProviderService.getSourceProvi

我一直忙于未来,将一个旧的Eclipse3.7应用程序迁移到Eclipse4,虽然我对移植所有视图的应用程序模型感到满意,但我有许多源代码提供者,我不确定是否需要移植。我一直在使用Eclipse4上的一些教程,包括但没有一个涵盖这个特定元素

对于少量的上下文,我现有的应用程序有几个扩展AbstractSourceProvider的类,这些类在org.eclipse.ui.services扩展点中注册。我的视图使用工作台中的
ISourceProviderService.getSourceProvider(key)
函数将自己注册为这些服务的侦听器,并在源触发源更改事件时更新自己。我也有一些提供者有时相互引用,所以我想知道这是否仍然适用于注入

Eclipse4中使用了什么样的模型?我应该使用相同的旧扩展点吗?这些扩展点服务能否以新的酷的方式注入到视图中


提供了什么?

您可以通过多种方式创建服务:

创建服务类的实例并将其放入
IEclipseContext
中。这通常在“插件”中完成:

公共类MyAddon
{
@施工后
无效后构造(IEclipseContext上下文)
{
MyService MyService=ContextInjectionFactory.make(MyService.class,context);
put(MyService.class,MyService);
}
}
“加载项”在application.e4xmi文件中声明

您还可以在类中为RCP创建这样的服务

将自动添加到Eclipse上下文中

您可以使用使用OSGi服务但在需要之前不创建实际服务的

在所有情况下,您都通过注入引用服务:

@Inject
我的服务我的服务;

注意,注入只在Eclipse从application.e4xmi中描述的对象创建的对象上进行。可以使用
ContextInjectionFactory

在其他对象上执行注入,您在谈论哪些扩展点?服务源提供者功能。org.eclipse.ui.services
org.eclipse.ui.services
在纯e4应用程序中不可用。事实上,所有使用源代码提供者的代码都不是e4的一部分。是的,我已经做到了这一点,问题是我到底要做什么?我可以把它全部放在单例中,并制作我自己的侦听器接口,但这有什么意义,感觉像是在倒退。服务可以以多种方式放在Eclipse上下文中,然后注入。事件可以在事件代理上广播,并通过@EventTopic使用注入来处理。感谢这一点,真的很有用,如果我使用一个插件来实现这一点,那么这些服务可以进行注入吗?我在这些服务中使用的Eclipse 3的另一个特性是,当某些源代码值发生更改时,菜单项会被禁用。如何使用源代码提供程序的概念复制这种行为?我更改了加载项示例,使用ContextInjectionFactory创建服务,以便它可以使用注入。菜单项的可见性和启用是通过“核心表达式”(org.eclipse.core.expressions.definitions)和handler@CanExecute方法完成的。