2012-11-18 167 views
1

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

但是我可以在单独的捆绑包中使用IEventBroker服务吗?作为注射领域的服务无法正常工作:

@Inject IEventBroker eventBroker; 

而且在我的课的构造函数注射服务不也行:

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

注入eventBroker是每次NULL。一般情况下,自己的OSGi包中是否可以使用IEventBroker?我必须将所需的插件添加到我的包中吗?是否有另一种方法可以将这些服务集成到自己的OSGi包中?

+0

[Eclipse RCP 4通过声明式服务使用捆绑包](http:// stackoverflow。com/questions/13435524/eclipse-rcp-4-use-bundle-via-declarative-service) –

+2

请不要转发问题。你有三个基本相同的问题。至少要链接到以前的问题,以便其他人可以看到上下文。 –

回答

1

@Inject不适用于纯捆绑。您需要使用Activator或像Blueprint或DS这样的依赖注入机制。

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

1

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

我后来suggested an update of this tutorial拉尔斯,他可能我的调查结果纳入他的教程(我不知道他是否已经做到了,虽然)

在短期内,需要集成以下额外束(见拉斯沃格尔为其他教程)到你的程序:

  • org.eclipse.e4.core.contexts
  • org.eclipse.e4.ui.servi CES
  • org.eclipse.e4.ui.di

此外,我需要改变的事件捕捉方法注释了一下:

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

,而不是

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

请注意,由于我不想使用e4,而不是JavaFX,因此您可能仍需要se UIEventTopic,而我需要切换到简单的EventTopic - 这会导致限制警告:-(

我希望您仍然可以参与其中,并且可以使用它!

+0

我也使用e(fx)clipse,即使在添加这些包之后,我也面临同样的问题。它们被添加为试图使用IEventBroker的捆绑包中的必需捆绑包。但是,代理始终为空。你有没有做其他事情来让你的课堂上有注射剂? –