私のウィザードのフィールドの一部を注入しようとしています。Eclipse RCP IWizardのインスタンスに注入
私は成功し、次のヘルパークラスを使用して独自のOSGi DSを注入することができますようにPartServiceやMApplicationなどRCP生態系から
public class UtilRCP {
public static void inject(Plugin plugin, Object object) {
IEclipseContext serviceContext = EclipseContextFactory.getServiceContext(plugin.getBundle().getBundleContext());
ContextInjectionFactory.inject(object, serviceContext);
}
}
その他のサービスには、(ヌル/実際の値が見つかりませんでした注入することに失敗します引数 "MApplication")。ここで
はコード
public class MyWizard extends MyAbstractWizard implements IImportWizard {
private MyWizardPage page;
@Inject
private EPartService partService;
@Inject
private DatabaseProvider databaseProvider;
@Inject
private MApplication application;
public MyWizard() {
System.err.println("Create");
System.err.println(databaseProvider);
System.err.println(partService);
System.err.println(application);
}
@Override
public void init(IWorkbench workbench, IStructuredSelection selection) {
UtilRCP.inject(Activator.getDefault(), this);
System.err.println("Init");
System.err.println(databaseProvider);
System.err.println(partService);
System.err.println(application);
}
@Override
public void addPages() {
super.addPages();
page = new MyWizardPage();
addPage(page);
}
@Override
public boolean performFinish() {
return true;
}
}
それは魅力のように機能します、ありがとうございます! 呼び出すことによってコンテキストを取得するのがなぜ違うのか説明できますか? IEclipseContext serviceContext = EclipseContextFactory.getServiceContext(plugin.getBundle()。getBundleContext()); および IEclipseContext serviceContext = workbench.getService(IEclipseContext.class); – kerner1000
PartServiceを使用すると、次の例外が発生します。 java.lang.IllegalStateException:アプリケーションにアクティブなウィンドウがありません \t at org.eclipse.e4.ui.internal.workbench.ApplicationPartServiceImpl.getActiveWindowService(ApplicationPartServiceImpl.java:43 ) – kerner1000
各部分に1つ、アプリケーションに1つ、多くの部分に多くの異なるコンテキストがあります。サービスコンテキストは、OSGiサービスの特殊なコンテキストであり、他の用途には適していません。 –