Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将IEventBroker注入到Eclipse RCP应用程序的应用程序模型中未定义的类中?_Java_Dependency Injection_Eclipse Rcp_E4 - Fatal编程技术网

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

Java 如何将IEventBroker注入到Eclipse RCP应用程序的应用程序模型中未定义的类中?,java,dependency-injection,eclipse-rcp,e4,Java,Dependency Injection,Eclipse Rcp,E4,我有两个班,A类和B类A是用于在RCP应用程序中显示零件的类,该类在应用程序模型中定义B是一个用于检索数据的自定义类,每当数据发生更改时,它应通知类a以更新相关UI。我问了一个关于如何使这两个类协调的问题。然而现在的问题是,由于B未在应用程序模型中定义,因此每当我在类B中调用eventBroker.post(),它都会返回null 我在调用classB时尝试了以下方法: B b = new B(); ContextInjectionFactory.inject(b,IEclipseContext

我有两个班,A类B类A是用于在RCP应用程序中显示零件的类,该类在应用程序模型中定义B是一个用于检索数据的自定义类,每当数据发生更改时,它应通知类a以更新相关UI。我问了一个关于如何使这两个类协调的问题。然而现在的问题是,由于B未在应用程序模型中定义,因此每当我在类B中调用
eventBroker.post()
,它都会返回null

我在调用classB时尝试了以下方法:

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

我不知道如何获取上面代码中没有定义的
IEclipseContext
,因为上面的代码不是在应用程序模型中定义的类中执行的。如果有人能解释这个问题,我将不胜感激。

您必须从注入系统确实知道的地方开始,并使用注入系统创建所有中间类

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

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

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

BundleContext BundleContext=。。。你的插件包上下文
IEclipseContext serviceContext=EclipseContextFactory.getServiceContext(bundleContext);
此上下文的内容非常有限,但确实包括事件代理