无法注入 EPartService
Can't inject EPartService
在我的包激活器中,我尝试注入字段 'IEventBroker' 和 'EPartService'。但只先注射。代码如下:
@Inject
IEventBroker m_broker;
@Inject
EPartService m_part_service;
public void start(BundleContext context) throws Exception {
IEclipseContext service_context = EclipseContextFactory.getServiceContext(context);
ContextInjectionFactory.inject(this, service_context);
boolean contains = service_context.containsKey(EPartService.class);
// contains is always "true", but m_part_service is always "null"
// all follows invocations returns "null" too
//
// service_context.get(EPartService.class);
// service_context.getActiveLeaf().getActive(EPartService.class);
// service_context.getActiveLeaf().getLocal(EPartService.class);
// context.getServiceReference(EPartService.class);
// m_broker always non-null
m_broker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, new EventHandler()
{
@Override
public void handleEvent(Event event)
{
// ... bla bla bla
}
});
}
在 IEclipseContext 的内部列表中,我找到了 EPartService。
你能帮助我吗?我做错了什么?
未注入捆绑激活器,因此您无法使用 @Inject
。
EclipseContextFactory.getServiceContext
返回的上下文内容非常有限,不能用于访问 EPartService
.
之类的内容
在任何情况下,捆绑激活器通常甚至 运行 直到您的插件中的其他东西被使用,所以无论如何看到启动完成消息都为时已晚。
所以这一切意味着你不能在捆绑激活器 start
方法中做你想做的事。
要获得有关应用程序启动完成事件的通知,您可以使用应用程序生命周期 class 或定义一个附加组件 - 这两个 class 都会被注入。
在那些 classes 中使用如下方法:
@Optional
@Inject
public void appStartupComplete(@UIEventTopic(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE)
org.osgi.service.event.Event event)
在我的包激活器中,我尝试注入字段 'IEventBroker' 和 'EPartService'。但只先注射。代码如下:
@Inject
IEventBroker m_broker;
@Inject
EPartService m_part_service;
public void start(BundleContext context) throws Exception {
IEclipseContext service_context = EclipseContextFactory.getServiceContext(context);
ContextInjectionFactory.inject(this, service_context);
boolean contains = service_context.containsKey(EPartService.class);
// contains is always "true", but m_part_service is always "null"
// all follows invocations returns "null" too
//
// service_context.get(EPartService.class);
// service_context.getActiveLeaf().getActive(EPartService.class);
// service_context.getActiveLeaf().getLocal(EPartService.class);
// context.getServiceReference(EPartService.class);
// m_broker always non-null
m_broker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, new EventHandler()
{
@Override
public void handleEvent(Event event)
{
// ... bla bla bla
}
});
}
在 IEclipseContext 的内部列表中,我找到了 EPartService。 你能帮助我吗?我做错了什么?
未注入捆绑激活器,因此您无法使用 @Inject
。
EclipseContextFactory.getServiceContext
返回的上下文内容非常有限,不能用于访问 EPartService
.
在任何情况下,捆绑激活器通常甚至 运行 直到您的插件中的其他东西被使用,所以无论如何看到启动完成消息都为时已晚。
所以这一切意味着你不能在捆绑激活器 start
方法中做你想做的事。
要获得有关应用程序启动完成事件的通知,您可以使用应用程序生命周期 class 或定义一个附加组件 - 这两个 class 都会被注入。
在那些 classes 中使用如下方法:
@Optional
@Inject
public void appStartupComplete(@UIEventTopic(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE)
org.osgi.service.event.Event event)