【问题标题】:Eclipse 4 RCP did not inject object to my classEclipse 4 RCP 没有向我的班级注入对象
【发布时间】:2018-02-26 20:04:56
【问题描述】:

我正在尝试将一个对象注入到我自己的类 (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);
        }
    }
}

【问题讨论】:

    标签: java eclipse dependency-injection eclipse-rcp e4


    【解决方案1】:

    使用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);
    
        //...
      }
    }
    

    【讨论】:

    • 谢谢格雷格!我只是 RCP 和 DI 的新手。我已经阅读了很多文档,但没有看到这些知识。你能把这些知识的文档分享给我吗?
    • 我一般看 Lars Vogel 的tutorial 和他的书。但我也只是读了很多源代码。
    【解决方案2】:

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

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

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

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

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      相关资源
      最近更新 更多