我有两个课程, 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
,因为上面的代码不是在应用程序模型中定义的类中执行的。我真的很感激,如果有人能够解决这个问题。
答案 0 :(得分:0)
你必须从注射系统知道的某个地方开始,并使用注射系统创建所有中间类。
这可能类似于命令处理程序,您可以使用ContextInjectionFactory.make
或ContextInjectionFactory.inject
来创建/注入类。还有其他几种方法可以通过注入创建类,但它们都需要您从应用程序模型知道的东西开始。
对于您希望在整个应用程序中可用的类,在应用程序LifeCycle class中创建它们是应用程序模型已知的另一个可能的位置。
或者,您可以使用可通过以下方式访问的OSGi服务上下文:
BundleContext bundleContext = ... your plugin's bundle context
IEclipseContext serviceContext = EclipseContextFactory.getServiceContext(bundleContext);
此上下文的内容非常有限,但确实包含事件代理。