どうすればこれを解決できますか?
メインのRCPプラグインにユーザー資格情報があります。他のすべてのプラグインにもその情報が必要です。プレファレンスストアにもグローバルに使用可能なノード名が必要なため、プリファレンスストアは使用できません。
グローバル変数を実現する可能性はありますか?
ありがとう!
どうすればこれを解決できますか?
メインのRCPプラグインにユーザー資格情報があります。他のすべてのプラグインにもその情報が必要です。プレファレンスストアにもグローバルに使用可能なノード名が必要なため、プリファレンスストアは使用できません。
グローバル変数を実現する可能性はありますか?
ありがとう!
いくつかのオプションがあります。
迅速で汚いアプローチは、グローバル変数のゲッターをプラグインの1つのアクティベーターに入れることです。次に、次のようにグローバルを取得します。
SomePluginActivator.getDefault().getGlobalData()
これには、プラグインを緊密に結合するという欠点があり、プラグインアーキテクチャの精神に多少反します。
2番目のアプローチは、ワークベンチサービスを使用することです。org.eclipse.ui
プラグインへの依存関係が導入されますが、これは少し優れています。グローバルデータを提供するプラグインで、の拡張子を作成しますorg.eclipse.ui.services
。サービスインターフェイスとサービスファクトリを定義します。ファクトリは、インターフェイスの実装を返す必要があります。クライアントは、サービスロケーターにサービスインターフェイスのインスタンスを要求することにより、グローバルサービスのインスタンスを取得します。プラットフォームはファクトリを使用してサービスのインスタンスを作成します。
IMyGlobalService service = (IMyGlobalService) PlatformUI.getWorkbench().getService(IMyGlobalService.class);
これはおなじみのサービスロケーターパターンです。このアプローチの利点は、一部のグローバルデータの利用者が、データがどこから来ているのかを知る必要がないことです。柔軟性を高めるために、あるプラグインでインターフェースを宣言し、別のプラグインでファクトリと実装を宣言して、実装を入れ替えることができます。
3番目のアプローチは、拡張ポイントを使用することです。私自身は試していませんが、グローバルデータを提供するプラグインで拡張ポイントを宣言し、それを拡張するプラグインにグローバルデータを挿入できるはずです。
最後のアプローチは、OSGiサービスを使用することです。私はこのアプローチにあまり精通していません。OSGiサービスを作成すると、他のプラグインはOSGiフレームワークを使用してサービスを検索します。これは上記のワークベンチサービスに似ていますが、EclipseRCPを直接使用しません。ホワイトボードパターンについても読む必要があります(警告:PDFリンク)。
この質問はずっと前に提起されたと思いますが、この問題に関する最近の議論は見つかりませんでした。
RCP開発は初めてですが、IEclipsePreferencesを使用してみませんか?書く:
IEclipsePreferences rootNode = Platform.getPreferencesService().getRootNode();
rootNode.put("currentFileName", "my.file.name.txt");
他の場所を読んでください:
IEclipsePreferences rootNode = Platform.getPreferencesService().getRootNode();
String currentFileName = rootNode.get("currentFileName", null);