无法注入EPartService

时间:2017-12-26 11:58:52

标签: eclipse e4

在我的捆绑激活器中,我尝试注入字段' 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。 你能帮助我吗?我做错了什么?

1 个答案:

答案 0 :(得分:0)

未注入捆绑激活器,因此您无法使用@Inject

EclipseContextFactory.getServiceContext返回的上下文内容非常有限,无法用于访问EPartService等内容。

在任何情况下,捆绑激活器通常都不会运行,直到使用插件中的其他内容为止,因此无论如何都要看启动完成消息为时已晚。

所以这一切意味着你无法在bundle activator start方法中做你想做的事。

要获得有关app startup complete事件的通知,您可以使用应用程序LifeCycle类或定义AddOn - 这两个类都被注入。

在这些课程中使用如下方法:

@Optional
@Inject
public void appStartupComplete(@UIEventTopic(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE)
                               org.osgi.service.event.Event event)