8

基本的なプラグインアーキテクチャを使用するために開発したプログラムがあります。事実上、プログラムがロードされると、リフレクションを使用して、特定のインターフェイスに適合するdllをディレクトリで検索し、それらをロードします。現在使用されるプラグインのリストがすべてであるように見えます。

したがって、dllファイルをチェックする私の現在の慣行はまだベストプラクティスですか、それとも各dllをロードするためのより良い方法がありますか?

ありがとう。

4

6 に答える 6

15

あなたの質問から、あなたはあなた自身の種類のプラグインアーキテクチャを構築した(または構築しようとしている)ように見えます。.NETにはすでに探しているものがあるので、それほど良い考えではありません。

.NETには、プラグインを許可する2つの方法があります。

  1. System.Addin
  2. MEF-マネージドエクステンシビリティフレームワーク

(1) System.Addin-私はそれについてほとんど聞いたり読んだりしていません。ただし、ここでいくつかの記事を見ることができます
。MSDNマガジンのSystem.Addinの記事<-2007年の
System.AddinツールとCodeplexの例に注意してください。

(2)さて、MEF、MEFは素晴らしいです!プラグインアーキテクチャをシステムに導入するための優れた簡単な方法です。MEFもSilverlightの一部であり、VisualStudio2010はそれを使用します。プラグインを使用してdllを動的にロードする必要があることがわかります。MEFを使用すると、ソフトウェアでパッケージ化するクラスを独自のアセンブリ(.exe)に含めることができるようにアプリを設計でき、MEFを使用して動的に検索できます。必要なクラスを持つ将来のdll。MEFでは、手順全体が非常に簡単です。

MikeTaultyはMEFで素晴らしいビデオシリーズを持っています

CodeprojectのMEF記事-パート 1CodeprojectのMEF記事-パート2

MEFはCodeplexのオープンソースです

個人的には、MEFを使用する必要があると思います。その新しい、簡単で、ビジュアルスタジオでもMEFを使用しているので、次の内容を確認できます
。MEFとMAFのどちらを選択するか(System.AddIn)

SOのmefタグで他のトップ投票の質問をチェックしてください

于 2011-01-20T14:17:14.387 に答える
6

FileSystemWatcherクラスを使用して、ディレクトリの変更を監視できます。

publicvoid CreateWatcher()
{
//Create a new FileSystemWatcher.
FileSystemWatcher watcher = newFileSystemWatcher();

//Set the filter to only catch DLL files.
watcher.Filter = "*.dll";

//Subscribe to the Created event.
watcher.Created += new
FileSystemEventHandler(watcher_FileCreated);

//Set the path to C:\Temp\
watcher.Path = @"C:\Temp\";

//Enable the FileSystemWatcher events.
watcher.EnableRaisingEvents = true;
}

それからそれはプラグアンドプレイの事件になります:)

于 2011-01-20T14:05:25.140 に答える
3

MEFを参照してください 。これは、プラグインデザインを作成するための非常に強力なアーキテクチャソリューションです。

于 2011-01-20T14:06:16.470 に答える
1

これはいい。または、構成ファイルにロードするアセンブリを定義することもできます。そのフォルダーに多数のDLLがあるとアプリケーションに影響があり、誰かがDLLをそのフォルダーにプッシュする可能性があるため、セキュリティ上の問題が発生する可能性があります。

于 2011-01-20T14:06:21.963 に答える
0
  • プラグインは「事前にロードするdllがわからない」という意味なので、「unknown-dll」を早期にバインドする方法はありません。インターフェイスの実装をロードして検索し、一種の遅延バインディングを使用する必要があります。
  • 「configfileの編集」の代わりに「dllの検索」は非常にユーザーフレンドリーです。ほとんどの場合、dllの検索は、プログラムの開始時に1回だけ実行されるため、パフォーマンスの問題ではありません。

あなたのデザインは大丈夫だと思います。

于 2011-01-20T14:29:51.230 に答える
0

シナリオでは、MEFとそのDirectoryCatalogを使用して、特定のフォルダーからプラグインをロードすることをお勧めします。MEFの再構成機能のおかげで、ファイルシステムウォッチャーを追加で構成し、フォルダーの変更時にDirectoryCatalogを更新すると、実行時に新しいプラグインをプルできるようになります。ところで、私がMEFトークの1つで行った素晴らしい再構成サンプルを見ることができます。

于 2011-09-25T08:07:04.103 に答える