2

インターフェイスを介してプラグインをサポートするアプリケーションがあります。一方、プラグイン自体には多くのロジックとコードが含まれています。プラグインには、アプリケーションが公開するインターフェイスのほかに、アプリケーション ライブラリへの依存関係 (プロジェクトおよび dll 参照) があります。

アプリケーション コア ライブラリには、プラグインで使用できる再利用可能なコンポーネントが多数あります。ただし、これらのコンポーネントのいずれかが変更されると、プラグインとアプリケーションの両方が影響を受けます。どちらにも依存関係があるためです。

プラグインが拡張するシステムへの依存関係を含むプラグインを使用することは許容されますか? この問題に関するベスト プラクティスは何ですか?

あなたの考えや経験を共有してください。

4

3 に答える 3

2

Mono.Addinsを見てみましょう。C# で開発していなくても、素晴らしいアイデアが得られるでしょう。

簡単な解決策は、プラグインとコアのバージョン システムを定義することです。これにより、プラグインが必要とする自身のバージョンをコアが読み取ることができます。そうすれば、以前のバージョンのコアで使用することを意図したプラグインのロードを簡単に防ぐことができます。

于 2009-01-30T12:53:54.577 に答える
1

私たちが話しているレベルに応じて、あなたの質問には2つの答えがあると思います:

  • はい、プラグイン ホストにプラグインを依存させることは問題ありません。ホストはプラグインの使用/実行を調整していますが、ホストがプラグインを支援する機能を提供しない理由はありません。それをもう少し拡張すると、ホストの依存関係は、プラグインが使用するのに公正なゲームである場合とそうでない場合があります (これは「依存する...」の領域に入ります)。
  • いいえ、プラグインは、プラグインが直接渡すオブジェクトを除いて、ホストが提供できるコードに直接依存するべきではありません。
于 2009-02-12T17:55:10.237 に答える
0

プラグインがコアを参照していてもまったく問題ないと思います。ここで、プロジェクトと dll の参照について話しているので、c#、vb、または c++ を使用する必要があります。これらのソリューションはすべて問題なく使用できるはずです。

私は通常、循環依存を回避するために 2 つのプロジェクトを持っています。

  1. プロジェクト ベース、インターフェイス、例外
  2. ロジック/構成/プラグインローダー

通常、プラグインをロードする方法は 3 つあります

  1. ループとファイルシステム ウォッチャーを使用したディレクトリ外 (遅いが効果的)
  2. 名前付きタイプを使用して、.net で独自の構成セクションを使用する (推奨され、最速)
  3. データベースからロードします (スケーラビリティに適しています)
于 2009-01-30T12:34:46.860 に答える