2008-11-11 27 views
4

假设你有一个带有各种视图的eclipse插件,这些视图应该显示来自将数据推送到视图的一些OSGi包的数据。我没有将所有视图与OSGi包进行通信,而是有一个中间Facade类,它充当视图的黑板并管理视图和其他OSGi包之间的通信 - 这就是理论。如何在eclipse声明性服务和视图之间进行通信(ContentProviders)

问题出现了,因为ui包(包含Views和Facade)使用Declarative Services与另一个包(称为DataStore)进行通信。由于Data Store接收来自另一个源的异步数据更新,因此需要将内容推送到Facade(以及其他包(如果可用))。 OSGi实例化Facade以满足DataStore的DS配置上基数的要求,但视图由插件的IApplication实现实例化。即使应用程序和Facade是同一个类,我也会得到两个不知道彼此的独立实例。

如何启用这些组件之间的通信(插件应用程序,视图等和OSGi实例化的Facade)?

回答

1

一个解决方案是使用一个Singleton,并且将一个或两个应用程序和Facade寄存器与该Singleton一起使用。

但是,我真的不喜欢在这个问题上抛出一个全局变量的想法。这似乎没有道理 - 这肯定是一个常见问题,所以我假设有一个优雅的解决方案,我只是不知道如何搜索它。

+0

我同意单身人士似乎是一个坏主意。我希望我能提供一个真正的解决方案。 – 2008-11-11 23:35:39

1

你也可以使用Spring DM来连接你的OSGi服务并使用Martin Lippert glue plugin来连接OSGi服务(或者Spring beans)的视图,好的一点是你不需要编写任何基于服务API或弹簧API ...

相关问题