Hallo zusammen,
ich habe mal mit E4 RCP Entwicklung angefangen und finde das Verfahren mit DI ziemlich gut, leider funktioniert das bei mir noch nicht so wirklich.
Wie kann ich in einer ViewPart ein eigenes Objekt injizieren und in einer anderen View daraufzugreifen?
Ich habe es in der TableView über den IEclipseContext das Todo-Objekt injiziert.
Und in der TreeView will ich draufzugreifen. Wieso klappt es so nicht?
Gruss lam
ich habe mal mit E4 RCP Entwicklung angefangen und finde das Verfahren mit DI ziemlich gut, leider funktioniert das bei mir noch nicht so wirklich.
Wie kann ich in einer ViewPart ein eigenes Objekt injizieren und in einer anderen View daraufzugreifen?
Ich habe es in der TableView über den IEclipseContext das Todo-Objekt injiziert.
Java:
public class TableWith {
@Inject private Logger logger;
@Inject private IEclipseContext context;
private TableViewer viewer;
@Inject
public TableWith(Composite parent,@Optional IStylingEngine styleEngine) {
viewer = new TableViewer(parent, SWT.NONE);
viewer.setContentProvider(new ArrayContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.getTable().setHeaderVisible(true);
viewer.getTable().setLinesVisible(true);
styleEngine.setClassname(this.viewer.getControl(), "mailList");
Todo todo = new Todo();
todo.setDate(new Date());
todo.setNote("so geht das auch!");
context.set("myTodo", todo);
}
@PostConstruct
public void init(){
System.out.println("existModel1: "+context.containsKey("note"));
logger.info("Table created!");
}
class ViewLabelProvider extends LabelProvider{
public String getText(Object element) {
return element.toString();
};
}
}
Und in der TreeView will ich draufzugreifen. Wieso klappt es so nicht?
Java:
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.services.log.Logger;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
public class Tree {
@Inject private Logger logger;
@Inject private IEclipseContext context;
@Inject @Named("myTodo")Todo todo;
@Inject
public Tree(Composite parent) {
Button button = new Button(parent, SWT.PUSH);
button.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false,
false));
button.setText("Test");
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
super.widgetSelected(e);
System.out.println(todo.getNote());
}
});
}
@PostConstruct
public void init(){
logger.info("Tree created!");
}
}
Gruss lam