Search code examples
javaeclipsedependency-injectioneclipse-rcpe4

Eclipse 4 RCP did not inject object to my class


I'm trying to inject an object to my own class (OpenProjectItemHandler) as below context. But the injected object (eventBroker) is null. How can we inject the object?

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);
        }
    }
}

Solution

  • Objects created using new are not injected. You need to use ContextInjectionFactory.make to create the object.

    public class ProjectExplorerPart {
    
      protected TreeViewer viewer;
    
      @PostConstruct
      public void createComposite(Composite parent, IEclipseContext context) {
        //...
    
        OpenProjectItemHandler handler
            = ContextInjectionFactory.make(OpenProjectItemHandler.class, context);
    
        viewer.addDoubleClickListener(handler);
    
        //...
      }
    }