Eclipse plugin 如何访问兼容层IViewPart’;s(e4)MPart

Eclipse plugin 如何访问兼容层IViewPart’;s(e4)MPart,eclipse-plugin,eclipse-rcp,e4,Eclipse Plugin,Eclipse Rcp,E4,我正在将现有的Eclipse插件移植到e4。从非移植的IViewPart中,我想访问视图对应的e4MPart但无法使以下各项可靠工作: EPartService partService=(EPartService)PlatformUI.getWorkbench().getService(EPartService.class); MPart part=partService.findPart(getSite().getId()); 放置在createPartControlComposite) 我

我正在将现有的Eclipse插件移植到e4。从非移植的
IViewPart
中,我想访问视图对应的e4
MPart
但无法使以下各项可靠工作:

EPartService partService=(EPartService)PlatformUI.getWorkbench().getService(EPartService.class);
MPart part=partService.findPart(getSite().getId());
放置在
createPartControlComposite)

我有时会收到一个
IllegalStateException
(“应用程序没有活动窗口”)。

避免使用工作台上的部件服务,因为这仅在有活动窗口时有效

而是使用当前窗口的部件服务(该窗口可能未处于活动状态)。您可以使用以下方法在IViewPart中获取此服务:

EPartService partService=getSite().getService(EPartService.class);
MPart part=partService.findPart(getSite().getId());

这看起来像是我需要的。但请允许我回答一个快速的后续问题,以便更好地了解e4的内部工作:如果
IViewPart的多个实例(具有相同的ID)是允许的,以上是否保证找到与调用
IViewPart
/
IViewSite
相对应的
MPart
?否。如果同时使用辅助id,则只能使用具有相同id的多个视图部件。我不确定e4如何处理辅助id。感谢澄清。幸运的是,我的vi有多个副本ew是不允许的,所以这对我来说不是问题–即使可能存在多个窗口,其中可能存在单独的“单一”视图。但在AICT中,这些窗口也会获得单独的
EPartService
s,因此
findPart
应该为窗口找到正确的视图。