gpt4 book ai didi

java - Eclipse RCP 中的全局变量

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:03:32 25 4
gpt4 key购买 nike

我该如何解决:

我的主要 RCP 插件中有用户凭据信息。所有其他插件也应该有这些信息。 Preference Store 是不可能的,因为 Presference Store 还需要一个全局可用的节点名。

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

谢谢!

最佳答案

有几个选项。


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

SomePluginActivator.getDefault().getGlobalData()

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


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

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

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


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


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

关于java - Eclipse RCP 中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2457117/

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