无法注入 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)