【问题标题】:How many ways to sharing data between Eclipse RCP plugins?在 Eclipse RCP 插件之间共享数据的方法有多少?
【发布时间】:2017-11-07 11:25:15
【问题描述】:

我有一个 RCP 应用程序和一个 RCP 插件 (A),它们贡献了一个部分。零件中有一个 TreeViewer(包含许多项目)。我还定义了一个带有一些菜单项的弹出菜单(在文件 .e4xmi 中),然后将此菜单注册到 TreeViewer。

我正在编写另一个 RCP 插件 (B),它将为弹出菜单提供一个菜单项,并且在处理程序中我想删除 TreeViewer 中的选定项。

问题是我无法访问B中(A)部分的数据。A如何将数据(TreeViewer)共享给B?我发现一个解决方案是使用 EventBroker,但我想要其他一些解决方案。你能给我一些建议或提示吗?谢谢!

【问题讨论】:

    标签: eclipse-plugin treeview eclipse-rcp data-sharing


    【解决方案1】:

    有很多方法可以做到这一点。对于 e4 应用程序,最简单的做法是创建一个包含所有插件都可以访问的数据的单例类。

    您可以指定一个类是注入系统的可创建单例:

    @Creatable
    @Singleton
    public class MyDataMananger
    {
      ....
    }
    

    插件中的类然后可以注入该类:

    @Inject
    MyDataManager manager;
    

    你也可以

    • 使用 OSGi 服务并使用ServiceTracker
    • 注入使用ContextFunction 创建的类。
    • 只需通过插件的激活器(如ResourcesPlugin.getWorkspace())访问一个单例类。
    • 为服务定义扩展点

    【讨论】:

    • 感谢单身人士。我也知道这件事。你能给我一些关于其他人的提示或关键词吗?我搜索过关于在插件之间共享数据但还不满意。谢谢!
    • 添加了更多方法
    【解决方案2】:

    另一种方法是将数据存储在正确的 e4 上下文中
    E4 eclipse上下文的解释可以是found here
    此外,如果您有权访问 TreeViewer itsefdl,则可以使用 setData(..) 方法存储数据

    【讨论】:

      猜你喜欢
      • 2020-01-29
      • 2018-03-25
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      相关资源
      最近更新 更多