質問

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

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

ありがとう。

役に立ちましたか?

解決

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

.NETには、プラグインを許可する2つの方法が付属しています。

  1. System.Addin
  2. MEF -Managed Extensibility Framework

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

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

Mike Taultyには、MEFに関する素晴らしいビデオシリーズがあります

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

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

私は個人的にあなたを考えています したほうがいい MEFと一緒に行くと、その新しい、簡単で、視覚的なスタジオでさえも使用しています。
MEFとMAF(System.Addin)を選択する

SOでMEFタグに関する他のトップ投票の質問をチェックしてください

他のヒント

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;
}

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

参照する mefプラグインデザインを作成するための非常に強力なアーキテクチャソリューションです。

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

  • プラグインは次のことを意味します。「事前にロードするDLLを知っている」ことはありません」「未知のdll」を早期に結合する方法はありません。 遅いバインディング.
  • 「configfileの編集」ではなく「DLLの検索」は非常にユーザーフレンドリーです。ほとんどの場合、DLLの検索は、プログラムの開始時に1回だけ行われるため、パフォーマンスの問題ではありません。

おもう あなたのデザインは大丈夫です。

シナリオについては、MEFとそのDirectoryCatalogを使用して、特定のフォルダーからプラグインをロードすることをお勧めします。 File System Watcherを構成し、フォルダーの変更でDirectoryCatalogを更新すると、MEFの再構成機能のおかげで、ランタイムで新しいプラグインを引き出すことができます。ところで、あなたは見ることができます 私が私のMEFの講演の1つで行った素敵な再集再集合サンプル.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top