您的位置:首页 > 其它

BlogWriter博客客户端-3 及 插件机制实现原理

2009-09-25 17:52 357 查看

BlogWriter博客客户端-3 及 插件机制实现原理

BlogWriter 博客客户端 - 3

距上次写有关BlogWriter 文章已有好些天.
上篇文章简单介绍了 BlogWriter 是个什么东东.及其插件制作方法.

亦有朋友说 为何不用 wlw ? 怎么没用, 我也有用啊:-D , But 此文使用BlogWriter
做这个东东,兴趣而已.

现将其放在了CodePlex 上

http://blogwriter.codeplex.com/

BlogWriter 插件实现原理

1 定义接口

所有插件必须实现相应 接口(IPlugin)
IPlugin 接口定义了插件的基本信息, PlugBaseInfo 是的一个件信息的结构体.
及一个启动方法Sstart(). 此方法如同一个C#程序的一Main()方法,亦有其它类型的插件接口继承自此接口
主程序还将通过此接口检查插件的合法性.

public interface IPlugin
{
/// <summary>
/// 插件的基本信息
/// </summary>
PlugBaseInfo BaseInfo{get;}
/// <summary>
/// 插件应用的启动方法.加载插件时调用.
/// </summary>
/// <param name="FunctionMenuItem"></param>
void Start();
}

PlugBaseInfo 结构体

public struct PlugBaseInfo
{
/// <summary>
/// 插件名称,将在BlogWrite 程序的功能菜单显示
/// </summary>
public string Name;
/// <summary>
/// 插件的类型.宿主程序通过此属性确定插件类型
/// </summary>
public string Type;
/// <summary>
/// 插件图标
/// </summary>
public DW.Image Ico;
public string Readme;
}
IHost 接口 主程序继承自此接口, 接件通过此接口完成对主程序的访问.
为防上插件破坏主程序,插件通过此接口有限的访问主程序.


public interface IHost
{
ToolStripMenuItem FunctionMenu { get; }
string Editor_Value { get; set; }
}

[b]
2 反射调用



首选搜索插件目录找到所有插件程序集.
public string[] FindAssemblys()
{
string PlugsPath = Application.StartupPath + "//Plugins//";
string[] fis = IO.Directory.GetFiles(PlugsPath);
return fis;
}

然后加载找到的程序集

Assembly tmpAss = Assembly.LoadFile(filepath);
反射并实例插件对象.

//获取类型的构造函数信息
ConstructorInfo[] tmpConsInfos = tmpType.GetConstructors();
foreach (ConstructorInfo tmpConsInfo in tmpConsInfos)
{
//为构造函数生成调用的参数集合
.
:
:
//实例化对象
object tmpObj = tmpConsInfo.Invoke(tmpParams);
//
foreach (PropertyInfo tmpPropertiy in tmpType.GetProperties())
{
if (tmpPropertiy.Name == "BaseInfo")
{
try
{
IP.IPlugin instance = (IP.IPlugin)tmpObj;
PluginList.Add(instance);
//instance.Start();
}
catch
{

}
}
}
}

希望对朋友有帮助,若有不妥还请指正......

[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: