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