我的应用程序由许多部分组成,它们在应用程序的e4xmi文件中定义。我想隐藏并动态显示它们。我正在使用EpartService在处理程序中执行此操作,我可以在其中注入它。
但是我也希望用生命周期管理器控制部件的显示/隐藏,我不能注入EPartService。有没有办法实现并完全控制RCP应用程序的生命周期?
这里似乎存在完全相同的问题而且没有解决方案: https://www.eclipse.org/forums/index.php/t/595958/
我想实现'记住我喜欢的功能',其中显示有登录屏幕的部分而不是其他部分。退出后,还会显示相同的登录部分。所以我需要控制RCP app的生命周期。但是,在启动应用程序的e4xmi之前,我无法注入EPartService。
答案 0 :(得分:1)
如果要从注入的内容(例如LifeCycle类)创建类,则可以使用ContextInjectionFactory
创建注入类:
@Inject
IEclipseContext context;
MyClass myClass = ContextInjectionFactory.make(MyClass.class, context);
或者,如果您只是将IEclipseContext
传递给该课程,则可以使用以下方式获取部分服务:
EPartService partService = context.get(EPartService.class);
注意:每个零件都有一个单独的零件服务实例。根据您的工作情况,您可能需要确保为活动部件提供服务。
答案 1 :(得分:0)
如果您没有使用SWT,则可以使用e(fx)clipse e4渲染器代替JavaFX。
e(fx)clipse有更多可能来控制应用程序的生命周期。例如,您可以从Boolean
返回@PostContextCreate
,以表示您是否要继续启动。你不能在这里使用EPartService
,但你可以使用依赖注入来滚动你自己的登录对话框,正如greg-449在他的回答中描述的那样。
public class StartupHook {
@PostContextCreate
public Boolean startUp(IEclipseContext context) {
// show your login dialog
LoginManager loginManager = ContextInjectionFactory.make(LoginManager.class, context);
if(!loginManager.askUserToLogin()) {
return Boolean.FALSE;
}
return Boolean.TRUE;
}
}
(您也可以重新启动应用程序。表单 更多详情请见http://tomsondev.bestsolution.at/2014/11/03/efxclipse-1-1-new-features-api-to-restart-your-e4-app-on-startup/)。