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

Not able to inject CommandService to execute the command manually

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

..
@Execute
public void execute(EPartService partService,MApplication application,EModelService modelService) {
    MPart part = MBasicFactory.INSTANCE.createPart();
    part.setLabel("New Part");
    part.setContributionURI("platform:/plugin/com.my.First.app/src/com/my/first/Parts/EditorPart/EmptyPart");
    List<MPartStack> stacks = modelService.findElements(application, null,  MPartStack.class, null);
    stacks.get(2).getChildren().add(part);
    partService.showPart(part, PartState.ACTIVATE);
}

@Execute
public void execute() {
    //This Hello is getting printed.
    System.out.println("Hello ");
}     

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

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

            }
        }
    });  

此处,注入的 CommandService 为空,因此无法执行我的处理程序的此参数执行方法 class。
我相信还有另一个 CommandService (org.eclipse.fx.core.command.CommandService) for e(fx)clipse 但这也是空的。我正在使用它如下
控制器 Class :

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

[编辑] :
我的目标是在 Partstack 中打开新的 Part。因此,在第一个代码片段中,您可以看到我是如何在 execute(..) 中打开部分的。在这里,有没有办法使用 ContextInjectionFactoryIEclipseContext?
获取 partService 、 application 和 modelService 控制器 Class :

MyHandler 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. 

仅注入 Eclipse 根据 e4xmi 文件中的描述创建的 classes。

如果您 class 创建了一些其他方式,您可以使用以下方式进行注入:

ContextInjectionFactory.inject(object, context);

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

您还可以使用 ContextInjectionFactory.make 通过注入创建 class。