我正在开发基于Eclipse 4应用程序平台的RCP应用程序。
我的应用程序包含几个自己的OSGi包作为声明性服务实现。现在我想使用IEventBroker
服务,我可以很好地使用我的应用程序。
但是我可以在单独的捆绑包中使用IEventBroker
服务吗?将服务注入字段不起作用:
@Inject IEventBroker eventBroker;
在我的类的构造函数中注入服务也不起作用:
@Inject
public TestUserService(IEventBroker eventBroker) {
..
}
每次注入的eventBroker
都是NULL
。是否可以在自己的OSGi包中使用IEventBroker
?我是否必须在我的捆绑包中添加任何必需的插件?有没有其他方法可以将这些服务转换为自己的OSGi包?
答案 0 :(得分:1)
@Inject不适用于纯捆绑包。您需要使用Activator或依赖注入机制,如Blueprint或DS。
因此,尝试使用上述机制之一将IEventBorker作为OSGi服务进行查找,并将其注入您的类中。
答案 1 :(得分:1)
我知道,回答这个问题已经有点晚了,但我也对此感到不满。 我能够在Tom Schindel(e(fx)clipse)和Lars vogel(vogella turials,例如the EventAdmin tutorial)的帮助下解决它。
我后来suggested an update of this tutorial给了Lars,他可以将我的发现整合到他的教程中(不知道他是否已经做过了)
短期内,您需要将以下其他捆绑包(请参阅Lars Vogel的其他教程)整合到您的计划中:
此外,我需要稍微更改事件捕获方法注释:
@Inject handleSomething(@Optional @EventTopic("foo") Object bar) {...}
而不是
@Inject @Optional handleSomething(@UIEventTopic("foo") Object bar) {...}
请注意,因为我不想使用e4,而不是JavaFX,所以你可能仍然需要使用UIEventTopic,而我需要切换到普通的EventTopic - 这会导致限制警告:-(
我希望,你可能仍然可以使用它,你可以利用它!