Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无需注入即可获得e4服务_Java_Eclipse_Rcp_E4 - Fatal编程技术网

Java 无需注入即可获得e4服务

Java 无需注入即可获得e4服务,java,eclipse,rcp,e4,Java,Eclipse,Rcp,E4,我正在尝试调整EclipseRCP3.x应用程序以使用e4中的一些工具。因此,没有e4xmi文件 特别是,我需要获得一些服务: public class RunModeService { @Inject private static ECommandService commandService; @Inject private static EHandlerService handlerService; ... } 看起来,如果我自己实例化这个类(就像我正在做的那样),那么就不会发生任何

我正在尝试调整EclipseRCP3.x应用程序以使用e4中的一些工具。因此,没有e4xmi文件

特别是,我需要获得一些服务:

public class RunModeService {

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

...
}
看起来,如果我自己实例化这个类(就像我正在做的那样),那么就不会发生任何注入


有没有可能以另一种方式获得这些服务?如果是这样,我可以通过创建一个命令开始连接e4和DI,该命令的处理程序由框架实例化,并在其中发生注入。

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

ECommandService commandService=eclipseContext.get(ECommandService.class);
IEclipseContext
可以注入

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

MyClasss myClass=ContextInjectionFactory.make(myClass.class,eclipseContext);
或者,您可以使用以下方法在现有类实例上执行注入:

ContextInjectionFactory.inject(myClass,eclipseContext);
在视图或编辑器中,您可以使用以下方法从视图/编辑器站点获取Eclipse上下文:

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

但是
PartSite
是一个内部类,因此确实不应该使用它。

您也可以手动向类中注入活动的
IEclipseContext

IEclipseContext context = getActiveEclipseContext();
RunModeService service = ContextInjectionFactory.make(RunModeService.class, context);

要在没有DI的情况下获取活动的
IEclipseContext
,您可以使用中的示例代码。

似乎还需要注入IEclipseContext。从这个问题中,我获得了BundleContext并使用它获得了一个IEclipseContext:。但是,我的新上下文不包括ECommandService,实际上也不包括MapApplication。我想知道,如果您创建了e3应用程序,应用程序模型是否没有创建。该上下文是专门的OSGi服务上下文,仅包含OSGi服务。您需要来自MapApplication或MPart的上下文。所有Eclipse4应用程序都是e4,3.x应用程序只是在e4之上有很多兼容代码。