私は、Win32 および C/C++ でプラグイン アーキテクチャを何年も実行してきましLoadLibrary
たGetProcAddress
。
いよいよ C# の登場です。そこに対応する手順は何ですか - アセンブリを動的にロードしますか? それともまったく別のスキーマですか?
私は、Win32 および C/C++ でプラグイン アーキテクチャを何年も実行してきましLoadLibrary
たGetProcAddress
。
いよいよ C# の登場です。そこに対応する手順は何ですか - アセンブリを動的にロードしますか? それともまったく別のスキーマですか?
一般に、プラグインが期待される場所を調べ、アセンブリをロードし、特定のクラスを探すことができます。通常、プラグインは、ある種のプラグイン基本クラスを拡張するか、インターフェースを実装することによって、自分自身を宣伝します。
別のオプションはMEFで、これも .NET 4 の一部になりますが、プレビュー リリースは現在の .NET フレームワークでも動作します。
.Netアプリケーションでは、AppDomainとAppDomain.CurrentAppDomainを使用して、アセンブリをアプリケーションに動的にロードできます。問題は、AppDomainにロードされた後、アセンブリをアンロードできることです。この問題を解決するには、これらをロードできるという回避策があります。別のAppDomainにある種類のアセンブリをアンロードし、それらのアセンブリが不要な場合はいつでもアンロードします。ただし、2つの異なるAppDomainにある2つのアセンブリ間でオブジェクトを渡すのはそれほど簡単ではないため、このアプローチは非常に複雑です。
System.Addin 名前空間のクラスを使用できます。このディスカッションを参照してください: MEF と MAF の選択 (System.AddIn)
ここにもデモがあります: AddIn Enabled Applications
もう 1 つの解決策は、非常に強力なMono.AddInを使用することです。