GUIを使用したプラグインアーキテクチャ 質問する

GUIを使用したプラグインアーキテクチャ 質問する

私はプラグインを多用するアプリケーションを開発しています。このアプリケーションは C# で作成されており、WPF で構成 GUI を構築することを考えています。実際のプラグイン自体を管理する方法については、プラグイン アーキテクチャを理解しています。ただし、各プラグインには独自の構成があり、その点についてサポートを求めています。

プラグインのアーキテクチャはシンプルです。プラグインが実装するインターフェイスがあり、ディレクトリ内のすべてのプラグインをロードするだけです。しかし、プラグインはどこから構成を取得するのでしょうか。各プラグインが独自の構成ファイルを読み取る必要がないように、これを処理する一般的な方法が必要です。また、各プラグインで GUI が拡張されるようにしたいと思います。つまり、インストールされた各プラグインは、そのプラグインの特定の構成オプションを含むタブを GUI に追加する必要があります。保存すると、構成ファイルが保存されます。

これを解決する最善の方法は何でしょうか?

ベストアンサー1

設定可能なプラグインのインターフェースを定義します。

public interface IConfigurable
{
  public void LoadConfig(string configFile);

  public void ShowConfig();

  // Form or whatever, allows you to integrate it into another control
  public Form GetConfigWindow();
}

構成可能なプラグインの IConfigurable インターフェイスを呼び出すだけです。

必要に応じて、インターフェイスを逆に動作させて、メイン アプリケーションがプラグインにコンテナー (フレームやドックなど) を提供するようにすることもできますが、その逆をお勧めします。

public interface IConfigurable
{
  void LoadConfig(string configFile);

  void ShowConfig(DockPanel configurationPanel);
}

最後に、プラグインが構成オプションとして提供できるものを正確に定義することで、難しい方法を実現できます。

public interface IMainConfigInterop
{
  void AddConfigurationCheckBox(ConfigurationText text);
  void AddConfigurationRadioButton(ConfigurationText text);
  void AddConfigurationSpinEdit(Confguration text, int minValue, int maxValue);
}

public interface IConfigurable
{
  void LoadConfig(string configFile);

  void PrepareConfigWindow(IMainConfigInterop configInterop);
}

もちろん、このオプションは、プラグインが設定ウィンドウと対話する方法を完全に制限できるため、より制限が厳しく、より安全です。

おすすめ記事