如果您懶得閱讀所有這些,通常問題是:如何將Composite
父項傳遞給現有部分,假定這些部分是由Eclipse創建的,而不是手動創建的。Eclipse 4 - 將部分添加到SashForm
我正在開發一個Eclipse 4插件。我在不同的課程中有不同的部分(視圖),通過事件進行交流。一切都很好,並分開,直到我不得不實施包含2個零件的SashForm
。我看過一些例子,但他們大多顯示簡單的用法SashForm
。 我想要的是保持這種模塊化的所有依賴注入和自動事件接收(通過註釋)。 但我無法弄清楚如何做到這一點。 我最好的嘗試是使用IEclipseContext
這樣的:
@Inject
private EventPool eventPool;
@Inject
private EventBroker eventBroker;
@Inject
private CMTreeContentProvider contentProvider;
@Inject
private LoginService loginService;
@PostConstruct
public void createPartControl(Composite shell) {
SashForm form = new SashForm(shell, SWT.HORIZONTAL);
form.setLayout(new FillLayout());
renderCMTree(form);
renderProjects(form);
}
private void renderCMTree(SashForm form) {
Composite child = new Composite(form, SWT.NONE);
child.setLayout(new FillLayout());
IEclipseContext context = EclipseContextFactory.create();
context.set(Composite.class, child);
context.set(EventPool.class, eventPool);
context.set(EventBroker.class, eventBroker);
context.set(CMTreeContentProvider.class, contentProvider);
ContextInjectionFactory.make(CMTreeView.class, context);
context.dispose();
}
private void renderProjects(SashForm form) {
Composite child = new Composite(form, SWT.NONE);
child.setLayout(new FillLayout());
IEclipseContext context = EclipseContextFactory.create();
context.set(Composite.class, child);
context.set(EventPool.class, eventPool);
context.set(EventBroker.class, eventBroker);
ContextInjectionFactory.make(CMTicketView.class, context);
context.dispose();
}
正如你所看到的,我必須手動注入通過上下文所有的依賴。使用這種方法,消耗事件在CMTreeView
和CMTicketView
內不起作用(但是,我手動訂閱事件)。我可以忍受這一點,但也許有更好的方式來保持模塊化?我真的不希望這個類的長度超過2000行。
爲什麼不在Application.e4xmi中使用'Part Sash Container'來包含這兩部分? –
@ greg-449感謝您的評論。我試圖使用它,但無法使其工作。我見過的有關'PartSashContainer'的所有例子似乎都使用RCP模型,但我開發了一個插件。是否可以添加'PartSashContainer'作爲一個視圖,使其可以通過Window - > Show view訪問? – iozee
我使用Feautre名稱的「描述符」爲模型片段添加視圖。我可以以相同的方式添加PartSashContainer嗎? – iozee