Eclipse 4 RCP 没有向我的 class 注入对象

Eclipse 4 RCP did not inject object to my class

我正在尝试将一个对象注入到我自己的 class (OpenProjectItemHandler) 中,如下所示。但是注入的对象(eventBroker)是空的。我们如何注入对象?

public class ProjectExplorerPart {

    protected TreeViewer viewer;

    //@Inject IEventBroker eventBroker;

    @PostConstruct
    public void createComposite(Composite parent) {
        //...
        viewer.addDoubleClickListener(new OpenProjectItemHandler());

        //...
    }
}


public class OpenProjectItemHandler implements IDoubleClickListener {

    @Inject IEventBroker eventBroker;

    @Override
    public void doubleClick(DoubleClickEvent event) {
            //...
            //IEclipseContext eclipseContext = E4Workbench.getServiceContext();
            //eventBroker = eclipseContext.get(IEventBroker.class);
            eventBroker.send("ta/project_explorer/open_item", Collections.EMPTY_LIST);
        }
    }
}

使用new 创建的对象不会被注入。您需要使用 ContextInjectionFactory.make 创建对象。

public class ProjectExplorerPart {

  protected TreeViewer viewer;

  @PostConstruct
  public void createComposite(Composite parent, IEclipseContext context) {
    //...

    OpenProjectItemHandler handler
        = ContextInjectionFactory.make(OpenProjectItemHandler.class, context);

    viewer.addDoubleClickListener(handler);

    //...
  }
}

另一种选择是用 @Creatable 注释来注释要注入的 class,如下所示:

@Creatable
@Singleton
public class OpenProjectItemHandler implements IDoubleClickListener {
   ...
}

然后在框架管理的对象中使用标准注入来注入您的实例

public class ProjectExplorerPart {
   @Inject private OpenProjectItemHandler opih;
   @PostConstruct
   public void createComposite(Composite parent) {
    //...
    viewer.addDoubleClickListener(opih);
    //...
   }

}