3

どうすればこれを解決できますか?

メインのRCPプラグインにユーザー資格情報があります。他のすべてのプラグインにもその情報が必要です。プレファレンスストアにもグローバルに使用可能なノード名が必要なため、プリファレンスストアは使用できません。

グローバル変数を実現する可能性はありますか?

ありがとう!

4

2 に答える 2

8

いくつかのオプションがあります。


迅速で汚いアプローチは、グローバル変数のゲッターをプラグインの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リンク)。

于 2010-03-16T19:13:17.907 に答える
1

この質問はずっと前に提起されたと思いますが、この問題に関する最近の議論は見つかりませんでした。

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);
于 2013-10-30T15:53:54.293 に答える