我可以更改用于注入处理程序的上下文吗?

时间:2017-03-29 09:55:40

标签: java dependency-injection rcp e4

我们的e3 / e4 RCP应用程序由一系列带有模型片段的组件组成。在升级到e4之前,我们在每个组件中都有 Guice 模块,以便将成员注入到类中。

目前我们已经设置了一个超类来检测自定义DoExecute和DoCanExecute注释,它们使用ContextInjectionFactory通过自定义上下文调用这些方法。

示例:

        IEclipseContext subContext = (IEclipseContext) context.get(contextName);
    return (T) ContextInjectionFactory.invoke(this, annotation, subContext);

这成功地使用特定的上下文在执行我们为其创建注释的方法时注入成员,但是有点难看,并且必须为在e4中注入的所有注释完成。

e4定义和使用自定义上下文的最佳方法是什么?注意:我们不想使用IApplicationContext,因为它会违反每个组件的模块化设置。

1 个答案:

答案 0 :(得分:1)

IEclipseContext由Eclipse4框架以分层方式管理。通常,您将ApplicationContext作为父上下文,然后是子上下文的层次结构,例如Workbench>窗口>透视>部分。

鉴于我在E4开发方面的经验,在多模块应用程序的情况下,我会使用不同的键将我的模型对象存储在ApplicationContext中。

让我解释一下:IEclipseContext是一个哈希表,您可以使用不同的键存储多个对象。因此,系统中的每个模块(片段或包)都可以使用不同的密钥将其模型数据保存到IApplicationContext中。

例如,如果你有三个模块,在你的系统中,一个是平台,两个只是" module1"和" module2",您可以在应用程序上下文中存储每个模块的数据,如下所示:

**KEY**                 **VALUE**
org.myapp.platform  Java Object representing data model of the platform
org.myapp.module1   Java Object representing data model of the module1
org.myapp.module2   Java Object representing data model of the module2

顺便说一下,如果您担心上下文中公开的数据,可以通过设置与特定键对应的空值来删除上下文对象。

希望这有帮助。

您可以深入了解以下参考资料: