![](/img/trans.png)
[英]How to inject IEventBroker into a class not defined in Application Model of Eclipse RCP application?
[英]Eclipse 4 RCP did not inject object to my class
我試圖將對象注入到我自己的類( OpenProjectItemHandler
)中,如下所示。 但是注入的對象( eventBroker
)為null。 我們如何注入物體?
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
注釋來注釋要注入的類,如下所示:
@Creatable
@Singleton
public class OpenProjectItemHandler implements IDoubleClickListener {
...
}
然后在框架管理的對象中使用標准注入來注入實例
public class ProjectExplorerPart {
@Inject private OpenProjectItemHandler opih;
@PostConstruct
public void createComposite(Composite parent) {
//...
viewer.addDoubleClickListener(opih);
//...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.