Вопрос новичка, с которым мне не очень везет. В моем приложении e4 RCP у меня есть пара случаев, когда я создаю объект в мастере, который затем должен появиться в одном из моих представлений.
Желаемое поведение похоже на то, как представление проводника пакетов eclipse обновляется после создания нового проекта.
Я думал, что могу просто получить представление из partService и запустить свой собственный метод обновления:
MPart ingredientsView = partService.showPart("com.personal.recipes.part.ingredientsview", PartState.ACTIVATE);
IngredientsView iv = (IngredientsView) ingredientsView.getObject();
iv.updateView();
Хотя это работает в других местах, при вызове из мастера «partService» имеет значение null, а приложение NPE отсутствует.
Итак, каков запрещенный метод принудительного обновления представлений e4 после изменения их содержимого?
РЕДАКТИРОВАТЬ: я пытался использовать ContextInjectionFactory, как @greg-449 показал в своем ответе, но я не уверен, где его разместить в моем коде или как определить контекст. Я запускаю мастер с кнопки на панели инструментов и помещаю в свой обработчик следующий код:
@Execute
public void execute(Shell shell) {
IEclipseContext context = EclipseContextFactory.create();
IWizard ingredientWizard = ContextInjectionFactory.make(IngredientWizard.class, context);
WizardDialog wizardDialog = new WizardDialog(shell, ingredientWizard);
wizardDialog.open();
}
Однако, когда я попытался получить услугу детали с помощью @Inject EPartService partService; Я получил InjectionException, в котором говорится, что ошибок не обнаружено.
Как только инъекция станет доступной, использование EventBroker выглядит как выход.