无法注入CommandService以手动执行命令

时间:2015-12-01 12:10:52

标签: eclipse e4 efxclipse

我有分配给特定命令的处理程序(创建新部件),其定义如下并且工作正常,
处理程序类:

@Inject
org.eclipse.e4.core.commands.ECommandService commandService;
@Inject
org.eclipse.e4.core.commands.EHandlerService service;
..
..

locationTreeView.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent mouseEvent) {
            if (mouseEvent.getClickCount() == 2 && mouseEvent.getButton().equals(MouseButton.PRIMARY)
                    && locationTreeView.getSelectionModel().getSelectedItem().isLeaf()) {
                try {
                    Command command = commandService.getCommand(S_CMD_MY_COMMAND_ID);
                    if (!command.isDefined())
                        return;
                    ParameterizedCommand myCommand = commandService.createCommand(S_CMD_MY_COMMAND_ID, null);
                    service.activateHandler(S_CMD_MY_COMMAND_ID, new ShowImmobilizerPart());
                    if (!service.canExecute(myCommand))
                        return;
                    service.executeHandler(myCommand);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

            }
        }
    });  

我有一个控制器类来控制Fxml对象(treeView上的click事件)。我想从事件处理程序树视图中手动执行该命令 控制器类:

e(fx)clipse

这里,Injected CommandService为null,因此无法执行我的处理程序类的这个参数化执行方法 我相信@Inject org.eclipse.fx.core.command.CommandService commandService; .. .. if (commandService.exists(S_CMD_MY_COMMAND_ID) && commandService.canExecute(S_CMD_MY_COMMAND_ID, null)) { commandService.execute(S_CMD_MY_COMMAND_ID, null); } 还有另一个CommandService org.eclipse.fx.core.command.CommandService ),但它也是null。我正在使用如下 控制器类:

ContextInjectionFactory

[编辑]
我的目标是在Partstack中打开新的部分。因此,在第一个代码片段中,您可以看到我如何在执行(...)中打开部分。在这里,有没有办法使用IEclipseContextMyHandler myHandler = new MyHandler(); ContextInjectionFactory.inject(myHandler, iEclipseContext); //myHandler.execute(); This is woroking if i define execute() method in handler Class. myHandler.execute(partService,application,modelService); // This is not working as i am injecting this arguments at top of class. 获得partService,application和modelService? 控制器类

{{1}}

1 个答案:

答案 0 :(得分:1)

仅注入Eclipse从e4xmi文件中的描述创建的类。

如果您使用其他方式创建了一个类,则可以使用以下方法进行注射:

ContextInjectionFactory.inject(object, context);

其中object是要注入的类实例,context是要使用的IEclipseContext。请注意,这不会注入构造函数。

您也可以使用ContextInjectionFactory.make使用注入创建一个类。