Chrome や Firefox のように、ユーザー コミュニティからプラグインを受け入れるアプリケーションを開発したいと考えています。これは Web アプリケーションであるため、個々のユーザーのアプリケーションの各「インスタンス」は異なるプラグインを実行します (プラグインはシングルトン インスタンスとして読み込まれますが、特定のユーザーに対してのみ「アクティブ」になります)。私は .NET でアプリケーションを実装することを計画しており、プラグイン モデルのアーキテクチャを考え出そうとしています。
ここに私の望ましい属性があります:
- プラグインは、個別のアセンブリとして、コア アプリケーションの外部で完全にビルドされます。
- プラグインは、独自の「ロックダウン」された信頼性の低い環境で実行されます。おそらく別の AppDomain です。
- プラグインは、私が提供する API を介してのみ機能します。たとえば、ある種のファサードをインターフェイスとして渡すと、それを呼び出すことしかできず、他のアセンブリを呼び出すことはできません。ファイルシステムに影響を与えるなど、Webサーバーで任意にアクションを実行できるプラグインを使用できません。
- アドインの致命的なクラッシュがコア アプリケーションの安定性に影響を与えることはありません。
System.AddIn が私の最善の策のようですが、ロードされたアドインが私が提供する API を介してのみ機能し、他のアセンブリをロードしないようにする方法については不明です。System.AddIn はその機能を提供しますか? また、System.AddIn は ASP.NET / IIS で使用できますか?
System.Addin 以外にどのようなオプションがありますか?