我正在尝试调整 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/