在osgi包中使用Eclipse 4 IEventBroker

时间:2012-11-18 13:19:24

标签: eclipse osgi eclipse-rcp

我正在开发基于Eclipse 4应用程序平台的RCP应用程序。 我的应用程序包含几个自己的OSGi包作为声明性服务实现。现在我想使用IEventBroker服务,我可以很好地使用我的应用程序。

但是我可以在单独的捆绑包中使用IEventBroker服务吗?将服务注入字段不起作用:

@Inject IEventBroker eventBroker; 

在我的类的构造函数中注入服务也不起作用:

@Inject
public TestUserService(IEventBroker eventBroker) {
..
}

每次注入的eventBroker都是NULL。是否可以在自己的OSGi包中使用IEventBroker?我是否必须在我的捆绑包中添加任何必需的插件?有没有其他方法可以将这些服务转换为自己的OSGi包?

2 个答案:

答案 0 :(得分:1)

@Inject不适用于纯捆绑包。您需要使用Activator或依赖注入机制,如Blueprint或DS。

因此,尝试使用上述机制之一将IEventBorker作为OSGi服务进行查找,并将其注入您的类中。

答案 1 :(得分:1)

我知道,回答这个问题已经有点晚了,但我也对此感到不满。 我能够在Tom Schindele(fx)clipse)和Lars vogel(vogella turials,例如the EventAdmin tutorial)的帮助下解决它。

我后来suggested an update of this tutorial给了Lars,他可以将我的发现整合到他的教程中(不知道他是否已经做过了)

短期内,您需要将以下其他捆绑包(请参阅Lars Vogel的其他教程)整合到您的计划中:

  • org.eclipse.e4.core.contexts
  • org.eclipse.e4.ui.services
  • org.eclipse.e4.ui.di

此外,我需要稍微更改事件捕获方法注释:

@Inject handleSomething(@Optional @EventTopic("foo") Object bar) {...}

而不是

@Inject @Optional handleSomething(@UIEventTopic("foo") Object bar) {...}

请注意,因为我不想使用e4,而不是JavaFX,所以你可能仍然需要使用UIEventTopic,而我需要切换到普通的EventTopic - 这会导致限制警告:-(

我希望,你可能仍然可以使用它,你可以利用它!