假设你有一个带有各种视图的
eclipse插件,这些视图应该显示来自某些OSGi包的数据,这些数据包将数据推送到Views.我没有让每个视图与OSGi包进行通信,而是有一个中间Facade类,它充当视图的黑板,并管理视图和其他OSGi包之间的通信 – 这就是理论.
问题出现了,因为ui bundle(使用Views和Facade)使用Declarative Services与另一个bundle(称为DataStore)进行通信.由于数据存储从另一个源接收异步数据更新,因此需要将内容推送到Facade(以及其他捆绑包,如果它们可用). OSGi实例化Facade以满足DataStore DS配置的基数要求,但视图由插件的IApplication实现实例化.即使IApplication和Facade是同一个类,我也会得到两个不相互认识的独立实例.
如何在这些组件(插件应用程序,视图等和OSGi实例化的Facade)之间启用通信?
最佳答案 一种解决方案是使用Singleton,并且具有该Singleton的Application和Facade寄存器中的一个或两个.
但是,我真的不喜欢在这个问题上抛出一个全局变量的想法.它似乎没有意义 – 这一定是一个常见的问题,所以我假设有一个优雅的解决方案,我只是不知道如何搜索它.