如何解决这个问题:

我在我的主要RCP插件usercredential PVC门。所有其他插件应该有一个信息也是如此。首选项存储是不可能的,因为也presference商店需要这就需要将全局可用节点名。

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

谢谢!

有帮助吗?

解决方案

有几种选择。


在快速和肮脏的方法是把一个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链接)。

其他提示

我认识到这一问题早就被提出,但我还没有发现有关此问题的更近的讨论。

我是新来的RCP开发,但为什么不使用IEclipsePreferences? 写:

IEclipsePreferences rootNode = Platform.getPreferencesService().getRootNode();
rootNode.put("currentFileName", "my.file.name.txt");

阅读别的地方:

IEclipsePreferences rootNode = Platform.getPreferencesService().getRootNode();
String currentFileName = rootNode.get("currentFileName", null);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top