Eclipse RCP,什么时候创建处理程序?

Eclipse RCP, when is a Handler created?

我们有一个 RCP 3/4 混合应用程序和一个在 fragment.e4xmi 中定义的处理程序。

<fragments xsi:type="fragment:StringModelFragment" xmi:id="_X7-AID93EeKXHI5xGhqnKg" featurename="handlers" parentElementId="org.eclipse.[..].application">
<elements xsi:type="commands:Handler" [..]/>
<elements xsi:type="commands:Handler" xmi:id="_jx8voD93EeKXHI5xGhqnKg" elementId="[..].ui.handler.addToDatabase" contributionURI="bundleclass://[..].ui/[..].ui.handlers.AddToDatabaseHandler" command="_TlV-ID93EeKXHI5xGhqnKg"/>
<elements xsi:type="commands:Handler" [..]/>

public class AddToDatabaseHandler implements EventHandler {

    private ISelectionMSD selection;

    public AddToDatabaseHandler() {
        System.err.println("Created " + this);
    }

    @Execute
    public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart part) {

        System.err.println(this + ": Execute, selection is " + selection);

        if(selection != null) {
            // do something
        }
    }

    @Override
    public void handleEvent(Event event) {

        if(event.getTopic().equals(UPDATE_SELECTION)) {
            selection = (ISelectionMSD)event.getProperty(IEvents.PROPERTY_SELECTION);
            System.err.println(this + ": Handle event, selection is " + selection);
        }
    }
}

我添加了一些 System.err,我可以看到这个处理程序的两个实例是通过 DI/反射隐式创建的。

1) 创建此处理程序的实例时是否有简单的解释?

2) 第一个创建的实例(就在平台启动时)错过了此 class 正在侦听的事件。所以它似乎没有作为事件侦听器添加到 EventAdmin 中。我能以某种方式调试它吗?

3) 对我来说这似乎是 "magic",第二个 class 何时何地以及如何注册以监听事件?这是平台在某个地方完成的,还是我只是错过了一些我们自己的代码?

非常感谢您的帮助!

我不确定您所说的 3/4 混合应用是什么意思。

e4 处理程序仅执行 @Execute(和 @CanExecute)方法,预计不会实现 EventHandler,并且不会查找此方法或调用此方法。

如果您想处理事件,请使用 @EventTopic@UIEventTopic

@Inject
@Optional
public void handleEvent(@EventTopic("topic id") Event event)