创建网站的最佳做法是什么,能够为其开发插件?
就像您想要创建博客模块一样,您希望用户或共同开发人员添加插件来扩展此模块功能。
更新 感谢超速的答案,但我认为这对我来说已经过时了。是不是有一个更简单的解决方案,就像我看到的blogengine插件创建系统你只需要用[Extension]来装饰类插件。
我是中级核心开发人员,所以我在考虑基类,继承,接口,你觉得怎么样?
答案 0 :(得分: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");
}
}
}
请记住,这只是插件架构的基本,最简单的示例。你也可以做一些事情,比如
AppDomain
如果你的设计如此指示。
答案 1 :(得分:2)
将技术和架构视角分开是很有价值的:
在建筑层面看到这个问题很好:
如果您阅读并尝试其中一些框架,我认为这是一种快速而有效的方法。如果你发现了令人感动的事情,ofcoz会阅读消息来源。
修改强>
如果您要搜索可扩展的博客引擎,请先尝试 Blog Engine 。它来自ASP.NET社区。 p>
答案 2 :(得分:1)
这听起来像是微软Managed Extensibility Framework的工作。它目前处于预览版本中,但它似乎比滚动自己的框架更好。有关如何在网站上使用此功能的指南链接。
答案 3 :(得分:1)
如果您希望看到实现此体系结构的真实开源应用程序,请查看DotNetNuke。