如何创建可插拔的ASP.Net网站?

Dev*_*nia 8 c# asp.net

创建网站的最佳实践是什么,能够为其开发插件?

就像您想要创建一个博客模块一样,您希望用户或共同开发人员添加插件来扩展此模块功能.

更新: 感谢超速的答案,但我认为这对我来说已经过时了.是不是有一个更简单的解决方案,就像我看到的blogengine插件创建系统你只需要用[Extension]来装饰类插件.

我是中级核心开发人员,所以我在想基类,继承,接口,你怎么看?

Ray*_*ack 12

编辑

我根据您的问题编辑完全重写了我的答案.

让我向您展示使用最少的步骤实现插件架构是多么容易.

第1步:定义插件将实现的接口.

namespace PluginInterface
{
    public interface IPlugin
    {
        string Name { get; }
        string Run(string input);
    }
}
Run Code Online (Sandbox Code Playgroud)

第2步:创建一个实现IPlugin的插件.

namespace PluginX
{
    using PluginInterface;

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

        public string Run(string input)
        {
            return input;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

第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");          

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请记住,这只是插件架构的基本,最直接的例子.你也可以做一些事情

  • 创建一个插件主机来运行你自己的插件 AppDomain
  • 选择接口,抽象类或属性来装饰你的插件
  • 使用反射,接口,IL发出的thunk或委托来完成后期绑定工作

如果你的设计如此规定.