如何将IEventBroker注入未在Eclipse RCP应用程序的应用程序模型中定义的类中?

时间:2016-11-30 08:48:45

标签: java dependency-injection eclipse-rcp e4

我有两个课程, A班 B班 A 是用于在RCP应用程序中显示Part的类,该应用程序在应用程序模型中定义。 B 是检索数据的自定义类,每当数据发生更改时,都应通知类 A 更新相关的UI。我问了一个问题here,关于如何使这两个类协调起来。但是现在的问题是,因为 B 没有在应用程序模型中定义,所以只要我在类 B eventBroker.post(),它就会返回 null >

当我调用类 B 时,我尝试了以下方法:

B b = new B();
ContextInjectionFactory.inject(b,IEclipseContext);
b.execute();

我不知道如何获得上面代码中未定义的IEclipseContext,因为上面的代码不是在应用程序模型中定义的类中执行的。我真的很感激,如果有人能够解决这个问题。

1 个答案:

答案 0 :(得分:0)

你必须从注射系统知道的某个地方开始,并使用注射系统创建所有中间类。

这可能类似于命令处理程序,您可以使用ContextInjectionFactory.makeContextInjectionFactory.inject来创建/注入类。还有其他几种方法可以通过注入创建类,但它们都需要您从应用程序模型知道的东西开始。

对于您希望在整个应用程序中可用的类,在应用程序LifeCycle class中创建它们是应用程序模型已知的另一个可能的位置。

或者,您可以使用可通过以下方式访问的OSGi服务上下文:

BundleContext bundleContext = ... your plugin's bundle context

IEclipseContext serviceContext = EclipseContextFactory.getServiceContext(bundleContext);

此上下文的内容非常有限,但确实包含事件代理。