.Net插件框架的实现及分析(一)
在开始自己系统的同时,总想将系统做得更灵活,可让其他人非常方便地参与进来,这就需要一个完善的插件系统,今天我准备写一个插件框架系列的文章,主要是想记录下我学习 ScrewTurn Wiki 系统的成果,也方便需要的人查阅
我个人感觉 ScrewTurn Wiki 系统的插件框架做得相当好,可让后期制作插件的人方便地将系统进行整合,所以这段时间都在研究。现大概说一下一个插件框架的架构和需求吧。我认为一个插件系统,应该可以独立于现有系统的类库,让第三方开发者只引用一个插件项目的DLL即可完成所有相关的开发,而且对系统框架要有一定的、统一的约定,不能让第三方开发者想怎样设计就怎样设计,因此一般的插件框架都是接口来实现会比较好,以下将说说大致的调用流程,呵,我就不画流程图啦(主要是我也懒得安装 ),只用文字说明一下吧:
用户访问网站 --> 调用核心功能函数 --> 调用实现此核心功能的接口
因此通过实现不同的接口,就可以方便地实现不同的功能函数,也达到了实现不同插件的效果,这个道理很简单,只要有接触过OO的人都会知道,但具体要如何实现呢,以下将慢慢道来。此插件框架主要使用了接口+Provider模式实现,因此需先设计好要被实现的接口,以下仅以一个格式化的功能为例吧,此格式化功能插件主要是在文章发布后对内容进行格式化处理,如可为此创建代码高亮插件、查看次数插件等,都是在文章输出时调用不同的格式化插件进行处理即可。 OK,第一步我们先定义好一个全局总的 IProvider 接口,好让之后所有插件都基于这些接口进行:
IProvider.cs 文件:
代码
namespace CoderBlog.PluginFramework
{
public interface IProvider
{
/// <summary>
/// 初始化插件
/// </summary>
/// <param name="host">主系统对象,可让插件调用主系统里的方法,以达到解耦合</param>
/// <param name="config">插件配置文件</param>
void Init(IHost host, string config);
/// <summary>
/// 当注销插件时调用
/// </summary>
void Shutdown();
/// <summary>
/// 插件开发者相关信息
/// </summary>
PluginInfo Information { get; }
/// <summary>
/// 插件帮助信息
/// </summary>
string ConfigHelpHtml { get; }
}
}
由于这个是最基础的接口类,所以包含的方法都是最能用的,每个类型的插件都应该会用到。这里顺便提一下 IHost 这个接口,这个是主系统函数调用的接口,可以放置一些插件系统里需要用到的一些常用方法和获取系统配置系统的函数等,以下我只提供2个接口以当演示,具体大家可根据自己需要去设计,因此接口并不是本系统的重点,代码如下:
IHost.cs 文件:
代码
namespace CoderBlog.PluginFramework
{
/// <summary>
/// 这里只需提供常用的功能函数和配置信息即可
/// </summary>
public interface IHost
{
/// <summary>
/// 获取用户列表
/// </summary>
/// <returns></returns>
List<UserIn
相关新闻>>
- 发表评论
-
- 最新评论 更多>>