2010-12-13 4 views
4

私はプラグインのアーキテクチャを理解しようとしています。具体的には、Windows Live Writerの実装に使用されています。私はあなたがDLLの(+ config)を追加/削除するだけで追加の機能を設定/有効/無効/追加/削除できるスタイルを指しています。プラグインのアーキテクチャ

私は、Webベースのアプリケーションと同様のものを見たいと思っています。誰でも正しい方向に向けることができますか?

ありがとうございます。

-SK

答えて

0

基本的には、インスタンスを作成し、それを起動し、その後、指定されたディレクトリから実行時にアセンブリをロードするためにAssemblyLoaderを使用する必要があります。

Assembly assembly = Assembly.LoadFrom("myAssembly.dll"); 
    Type type = assembly.GetType("theType"); 
    object myInstance = Activator.CreateInstance(type); 

すべてのプラグインがLoad()のような特定のメソッドを公開するインターフェイスを実装している場合に最適です。次に、あなたが行うことができます。

myInstance.Load() 

あなたのインターフェイスにmyInstanceのをキャスト提供します。

+3

この問題は、セキュリティ上のリスクが発生するということです。 'AppDomain'を使ってサンドボックスにロードする方が良いでしょう。 – James

3

これを見てくださいarticle。要するに、あなたは高いレベルで次のことを行う必要があります。

  1. プラグインが
  2. を動的にロードするタイプを指定する構成セクションまたはファイルを定義
  3. で生活するプラグインのdllのための特定の権限を持つサブディレクトリを作成して実装しなければならないインタフェースを定義しますプラグインdllから。
  4. のAppDomain

を使用してセキュリティで保護されたサンドボックスへのプラグインの設定&ディレクトリからロードしたDLLの私はこのことができます願っています。

0

プラグインの自動検出は、DLLを追加するだけで、System.Addin名前空間にカプセル化されます。プログラムを再起動するたびに、指定されたプラグインが追加/削除されます。ご覧のとおり、プログラムが実行されている間はプラグインを追加/削除するだけです。この機能が必要な場合は、DLLが追加または削除されたことを通知する独自のファイルイベントメカニズムを追加して、System.Addinコードを補強する必要があります。もちろん、実行中のもののためにDLLを削除したい場合、そのDLLはファイルロックを持っていてはいけません。これを実現するには、ShadowCopyをオンにして各DLLを実行させる必要があります。

1

あなたの質問にはASP.NETが付いていましたが、あなたの質問にはASP.NET固有のものは見当たりませんでした。差し替え可能なASP.NETは可能ですが、MAFと呼ばれるSystem.AddInを使用すると難しいです。私は約4日間で安全なWebサイトのプラグイン証明を作成しました。

http://suburbandestiny.com/Tech/?p=585

http://suburbandestiny.com/Tech/?p=588

ホストアプリが完全または中程度の信頼で実行されていましたしながら、クールなことは、最終的には、最低信託にアドインDLLを実行することがされていました。

最後に、System.AddInは、Microsoft Officeが直面するAddInの課題を解決するために作成されたものであり、web.appのAddInを作成するという課題ではありません。

MEFは、アドインタイプのパターンを行うための新しい輝きのあるものと思われますが、私はそれを経験していません。 MEFはMS Officeチームの問題を解決するだけでなく、一般的な解決策でもあることを意味していたので、いくぶん有望です。

+0

MEFはMAFに代わるものではありません。 MEFは拡張性に関するもので、MAFは分離に関するものです。 –