我该如何解决这个问题:
我的主 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(使用前将#替换为@)