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