gpt4 book ai didi

java - 我可以更改用于注入(inject)处理程序的上下文吗?

转载 作者:行者123 更新时间:2023-11-30 06:49:30 25 4
gpt4 key购买 nike

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

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

示例:

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

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

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

最佳答案

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

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

让我解释一下:IEclipseContext 是一个哈希表,您可以在其中使用不同的键存储多个对象。因此,系统中的每个模块(片段或包)都可以使用不同的 key 将其模型数据保存到 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

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

希望这有帮助。

您可以更深入地查看以下引用资料:

关于java - 我可以更改用于注入(inject)处理程序的上下文吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43090195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com