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

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

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

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

我是中级核心开发人员,所以我在考虑基类,inheritance,接口,你怎么看?

编辑

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

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

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

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

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

如果你的设计如此指示。

将技术和架构视角分开是很有价值的:

  • 在代码级别, MEF (Managed Extensibility Framework)是一个良好的开端。 这是一个简单的例子。
  • 任何其他DI(dependency injection框架)都可以很好地工作(即Unity)

在架构层面看到这个问题很好:

  • 来自p&p的Web客户端软件工厂 。 这里不仅有关于“如何创建复合Web应用程序?”的技术信息,而且还有关于这些信息的详细信息。 见例子。 。 有Modularity Boundle包。
  • Spring框架 。

如果您阅读并尝试其中一些框架,我认为这是一种快速而有效的方法。 如果你发现一些令人反感的东西,ofcoz会阅读这些来源。

编辑

如果您正在搜索可扩展的博客引擎,请先尝试使用Blog Engine 。 它来自ASP.NET社区。

这听起来像是Microsoft的Managed Extensibility Framework的一项工作。 它现在处于预览版本中,但它似乎比滚动自己的框架更好。 有关如何在网站上使用此function的指南链接。

如果您希望看到一个真实的,开源的应用程序,请参考DotNetNuke 。