2009-04-11 9 views
8

サイトを作成するためのベストプラクティスとそのプラグインを開発する能力は何ですか?プラグイン可能なASP.Net Webサイトを作成する方法は?

あなたはブログモジュールを作成したいと思うのですが、ユーザーや共同開発者にプラグインを追加してこのモジュール機能を拡張したいとします。

更新: 超高速のおかげで答えが出ましたが、これは私のために殺されたと思います。私はblogengineのプラグイン作成システムを見たように、あなたは[Extension]でクラスプラグインを飾る必要があるだけです。

私は中核的な開発者なので、基本クラス、継承、インターフェースを考えていましたが、どう思いますか?

+0

プラグインのアーキテクチャは単純ではありません。単純ならば、すべてのソフトウェアスタックとプログラミング言語に設計によって組み込まれます。各プラグインは何らかの種類の定義された方法でコアプログラムと通信する必要があります(そうでなければ、別々のプログラムになります)。 – Aron

答えて

12

編集

私は完全にあなたの質問の編集に基づいて私の答えを書き直しました。

最小限の手順でプラグインアーキテクチャを実装することがいかに簡単かをご紹介します。

ステップ1:プラグインが実装するインターフェイスを定義します。

namespace PluginInterface 
{ 
    public interface IPlugin 
    { 
     string Name { get; } 
     string Run(string input); 
    } 
} 

ステップ2:IPluginを実装したプラグインを作成します。

namespace PluginX 
{ 
    using PluginInterface; 

    public class Plugin : IPlugin 
    { 
     public string Name 
     { 
      get { return "Plugin X"; } 
     } 

     public string Run(string input) 
     { 
      return input; 
     } 
    } 
} 

ステップ3:プラグインを実行します。

namespace PluginTest 
{ 
    using System; 
    using System.IO; 
    using System.Runtime.Remoting; 
    using PluginInterface; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      string pluginFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "PluginX.dll"); 
      ObjectHandle handle = Activator.CreateInstanceFrom(pluginFile, "PluginX.Plugin"); 

      IPlugin plugin = handle.Unwrap() as IPlugin; 

      string pluginName = plugin.Name; 
      string pluginResult = plugin.Run("test string");   

     } 
    } 
} 

が、これは単にプラグインarchitechureの基本的な、最も簡単な例であり、心に留めておいてください。また、このような

  • ようなものは、それ自身のAppDomain
  • の内側にあなたのプラグインを実行するためのプラグインのホストを作成するのですできるインターフェイス、抽象クラス、または
  • 使用リフレクションを使用してプラグインを飾るために、属性、インターフェースのいずれかを選択ILバインドジョブを実行するためにILから放出されたサンクスまたはデリゲート

デザインがそうするよう指示されている場合。

+1

ありがとう、これはまさに私が探していたものです:) – DevMania

1

これはMicrosoftのManaged Extensibility Frameworkの仕事のようです。それは現時点ではプレビューリリースに含まれていますが、これは独自のフレームワークを使用するよりも優れた賭けに見えます。このサイトでこれを使用する方法に関するガイドへのリンクがあります。

2

それは技術的、architecturas視点を分離するのに貴重だ:コードレベルMEF(マネージド拡張フレームワーク)で

  • は良いスタートです。 Hereは簡単な例です。
  • その他DI(依存性注入フレームワーク)は、(つまり、ユニティ。)

にうまく機能することができ、それがアーキテクチャレベルでこの問題を見て良いことだ:

  • Web Client Software Factory P & Pから。ここでは、「複合Webアプリケーションを作成する方法」に関する技術的な情報だけでなく、有用な情報もあります。 examples.を参照してください。 Modularity Boundleパッケージがあります。
  • Spring Framework

&これらのフレームワークを試してみると、速く効率的だと思います。そしてintcoress何かを見つけるなら、ofcozはソースを読んでいます。

編集

あなたが拡張可能なブログエンジンを探しているならば、最初のBlog Engineを試してみてください。それはASP.NETコミュニティからのものです。

1

このアーキテクチャを暗示する実際のオープンソースアプリケーションを表示したい場合は、DotNetNukeを参照してください。

関連する問題