Eclipse RCP 中的全局变量

2023-12-02

我该如何解决这个问题:

我的主 RCP 插件中有用户凭据信息。所有其他插件也应该具有该信息。偏好存储是不可能的,因为偏好存储还需要一个全局可用的节点名。

有没有可能实现全局变量?

Thanks!


有几种选择。


快速而肮脏的方法是将全局变量的 getter 放入插件之一的激活器中。然后你就得到你的全局像:

SomePluginActivator.getDefault().getGlobalData()

这样做的缺点是会使插件紧密耦合,这在某种程度上违背了插件架构的精神。


第二种方法是使用工作台服务。这更好一点,尽管它引入了对org.eclipse.ui到你的插件中。在提供全局数据的插件中,创建一个扩展org.eclipse.ui.services。您定义服务接口和服务工厂。工厂应该返回接口的实现。您的客户端通过向服务定位器询问服务接口的实例来检索全局服务的实例。平台使用您的工厂来创建服务实例:

IMyGlobalService service = (IMyGlobalService) PlatformUI.getWorkbench().getService(IMyGlobalService.class);

这是熟悉的服务定位器模式。这种方法的好处是一些全局数据的使用者不需要知道它来自哪里。为了增加灵活性,您可以在一个插件中声明接口,在另一个插件中声明工厂和实现,以便可以交换实现。


第三种方法是使用扩展点。我自己没有尝试过,但似乎您应该能够在提供全局数据的插件中声明一个扩展点,然后将全局数据注入到扩展它的插件中。


最后一种方法是使用 OSGi 服务。我对这种方法最不熟悉。您编写一个 OSGi 服务,其他插件将使用 OSGi 框架来定位该服务。这与上面的工作台服务类似,但它不直接使用 Eclipse RCP。您还应该阅读有关白板图案(警告:PDF 链接)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Eclipse RCP 中的全局变量 的相关文章

随机推荐

  • MATLAB 到 Python 代码转换(NumPy、SciPy、MatplotLib?)

    我正在尝试将以下代码从 MATLAB 转换为 Python 以用于 EEG 项目 部分原因是 Python 稍微便宜一些 希望有人能指出我正确的方向 我已经开始改变它但陷入困境 特别是试图找到等效的功能 尝试过 scipy org NumP
  • 添加默认不可为空列时的 Oracle 错误

    我过去在 Oracle 11g 的各种实例中都遇到过这个错误 无法亲自访问 Oracle 支持来了解这是否是已识别 已解决的问题 该错误会导致查询始终返回列的默认值 即使记录实际上具有不同的值也是如此 它仅在特定查询中出现 并且是通过使用单
  • Excel / VBA - 使用动态范围的索引匹配函数

    如何有效地使用Index MatchVBA中的公式 背景 我有一个工作表 该工作表在很大程度上依赖于公式的使用 该公式根据将特定名称与其名称范围以及特定日期与其日期范围相匹配来检索输出 INDEX OutputRange MATCH 1 N
  • 如何计算两个日期之间的季度数

    问题一 您如何计算开始日期之间的季度数 base date变量 和ypandas 数据框中的列 from dateutil relativedelta import relativedelta import pandas as pd imp
  • 将锚标记替换为 span 或 div 或 p

    我有一个功能 一旦用户单击链接 就会发出 ajax 请求 如果发出请求 则该链接不应再单击 这是我用来完成此任务的方法 a id rsvp click function e e preventDefault post this data u
  • PHP - 多维数组差异

    我想请求你的帮助 因为我很难解决这个问题 我创建了一个函数来促进数组差异 但它不足以满足我的需求 谢谢 还有更多的力量
  • 设置 sbt 使用 Java 7 进行编译?

    我在运行时遇到编译错误compile任务 因为源引用了新类java nio file仅出现在 Java 7 中的包 我有以下内容build sbt javaHome Some file opt jdk jdk1 7 0 fork true
  • 重试之前的任务操作 TPL

    我想实现一个重试任务 该任务采用先前失败的任务操作并重复它 这是我到目前为止所拥有的 然而 它只是重复任务出错的事实 而不是再次实际触发任务的操作 public static async Task
  • Accept* HTTP 标头中的 q=0.5 是什么?

    Accept text html application xhtml xml application xml q 0 9 q 0 8 Accept Language en us en q 0 5 Accept Charset ISO 885
  • 如何在控制台项目中使用 Main() 启动窗口?

    我有一个控制台项目 但现在我需要放置一个用户界面 所以我使用 3 层模型 演示 业务 访问数据 按照我的方法Main 我调用的是表示层 比如Window形式的app或者Wpf 所以 在表示层就是通过CONSOLE与用户交互 现在 我在表示层
  • 运行 Android 应用程序时出现持续问题

    我在使用 Android 应用程序时遇到了非常困难的时期 我正在使用 Eclipse V 4 2 0 并运行 API 版本 7 下面是我遇到困难的一个程序的 LogCat 输出 这是我的代码 Manifest
  • Selenium WebDriver 和 Selenium 服务器

    我需要你的帮助来连接与硒相关的东西 在过去的几周里 我一直在阅读有关 Selenium 的文档 有selenium IDE 用于记录和重放测试的firefox扩展 硒 RC 硒 1 0 现在似乎已弃用 并使用代理 HTTP 服务器在多个浏览
  • IOS JSON 反序列化失败 - STIG/NSJSONSerializer

    我想反序列化从 IOS 中运行的 Web 服务收到的简单 JSON NickName James Roeiter3 TempId 634783760669935686 LDAP XUserName15 SecToken null NickN
  • OPENGL用户界面编程[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在开发一个图形应用程序来呈现数据 不是游戏 而是真正的主力应用程序 它需要跨平台 所以我选择了 python openGL 我需要 3D 混合
  • Excel VBA 循环遍历数据透视项

    我想循环遍历我的数据透视项并检查它们是否存在于另一个表中 请参阅我的示例屏幕截图 所以我想循环遍历所有颜色 检查它们是否存在于另一个表中 例如在另一个表中 有什么办法可以做到这一点 这样就会出现一个消息框 提示在列表中找不到紫色 非常感谢您
  • 如何在shell脚本中增加版本号?

    以下简单的版本控制脚本旨在查找给定文件的最后版本号 递增它 使用新创建的文件 例如编辑器 运行给定命令 然后将其保存到稳定版本 由于它很简单 因此不会检查任何内容 因为脚本会根据需要进行修改 例如 如果结果不稳定 用户可以省略最后一个参数
  • Java中有秒表吗?

    Java中有秒表吗 在 Google 上我只找到了不起作用的秒表代码 它们总是返回 0 毫秒 我发现这段代码不起作用 我不明白为什么 public class StopWatch private long startTime 0 priva
  • 在 VB 中从 SQL 检索数据(第 2 部分)

    我正在尝试通过 sql 从数据库检索数据来填充列表框 我之前已经问过这个问题 但我使用的是不同的配置 而我现在使用的配置没有给出任何结果 从 SQL 中检索 VB 中的数据 那是我的旧帖子 我现在将提供我的尝试的新版本的代码 Imports
  • 对 LinqDataSource 使用通配符

    我目前在 ASP NET 页面上有一个 LinqDataSource 用作 FormView 的数据源 我需要动态改变where基于通过查询字符串传递的参数的子句 除了我希望最终用户能够使用通配符之外 我的工作正常 A 用于表示单个字符 代
  • Eclipse RCP 中的全局变量

    我该如何解决这个问题 我的主 RCP 插件中有用户凭据信息 所有其他插件也应该具有该信息 偏好存储是不可能的 因为偏好存储还需要一个全局可用的节点名 有没有可能实现全局变量 Thanks 有几种选择 快速而肮脏的方法是将全局变量的 gett