【问题标题】:How can two eclipse plugin use the same preferences store?两个 Eclipse 插件如何使用相同的首选项存储?
【发布时间】:2011-02-10 23:37:01
【问题描述】:

我有两个插件,比如 com.site.plugin.core 和 com.site.plugin.ui。
我想将核心部分与 UI 部分分开,所以在插件 com.site.plugin.ui 中创建了首选项页面,在其中定义了一些首选项,com.site.plugin.core 应该使用这些首选项。我在Eclipse site查看文章,但它已经过时了,并且链接的错误也没有提供太多信息。
那么是否可以使用标准的 Eclipse 机制来做到这一点,或者我需要通过包 org.eclipse.core.runtime.preferences 使用直接的低级 API?

【问题讨论】:

    标签: eclipse eclipse-plugin preferences eclipse-pde


    【解决方案1】:

    每个插件都可以找到首选项商店。这是获取首选项商店的一种方法 激活器类为 ActivatorA 的插件。

    IPreferenceStore store = ActivatorA.getDefault().getPreferenceStore();
    

    如果你想让另一个插件引用同一个商店,也许你可以 在 ActivatorA 上公开一些 api 以使其到达那里,例如

    public IPreferenceStore getSharedPrefs() {
        return ActivatorA.getDefault().getPreferenceStore();
    }
    

    第二个插件会通过这样做找到共享存储

    IPreferenceStore sharedPrefs = ActivatorA.getSharedPrefs();
    

    祝你好运。

    【讨论】:

    • 嗯...但在这种情况下,我的核心插件应该知道 UI 部分。这不好。
    • 好的。一般来说,如果不是通过创建它的插件,核心插件定位共享数据的可接受方式是什么。怎么样:文件路径?,对话框设置?网址?
    【解决方案2】:

    我相信 UI 依赖于 Core 而不是其他的。在这种情况下,您可以在 UI 插件的首选项页面中使用 Core 的首选项存储,如下所示:

    IPreferenceStore store = CorePluginActivator.getDefault().getPreferenceStore();
    setPreferenceStore(store);
    

    通过这种方式,首选项页面会将值存储在核心插件中。 Core 插件可以使用这些值而不依赖于 UI 插件。

    【讨论】:

      【解决方案3】:

      您还可以使用首选项服务访问其他插件中的首选项:

      String pref = Platform.getPreferencesService().getString(
          "org.myplugin.preferences.page", "pref name",
          "default value if pref not found", null);
      

      【讨论】:

      • 请注意,对我来说“org.myplugin.preferences.page”不起作用,我必须使用“org.myplugin.id”。
      • 对我来说也是ID,谢谢提示。像这样,这对我来说是完美的解决方案:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      相关资源
      最近更新 更多