1

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

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

@Inject IEventBroker eventBroker; 

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

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

每次都eventBroker注射。NULL一般情况下是否IEventBroker可以在自己的 OSGi 包中使用?我是否必须将任何必需的插件添加到我的捆绑包中?是否有另一种方法可以将此类服务放入自己的 OSGi 包中?

4

2 回答 2

1

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

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

于 2012-11-19T11:06:05.300 回答
1

我知道,现在回答这个问题有点晚了,但我也在努力解决这个问题。我能够在Tom Schindel ( e(fx)clipse ) 和 Lars vogel (vogella turials,例如EventAdmin 教程) 的帮助下解决它。

后来我向拉斯建议更新本教程,他可以将我的发现整合到他的教程中(不过我不知道他是否已经这样做了)

短期内,您需要将以下附加捆绑包(其他捆绑包请参阅 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 - 这会导致限制警告:-(

我希望,您可能仍然对它感兴趣并且可以使用它!

于 2013-10-15T06:45:17.147 回答