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]
相关文章推荐
- BlogWriter博客客户端-3 及 插件机制实现原理
- Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
- WordPress插件机制实现原理
- Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
- WordPress插件机制实现原理
- Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
- Chromium Graphics: GPU客户端之间同步机制的原理和实现分析-Part II
- Chromium Graphics: GPU客户端之间同步机制的原理和实现分析-Part I
- WordPress插件机制实现原理
- php插件机制实现原理
- linux中Framebuffer的原理及实现机制
- 《深入理解mybatis原理(六)》 MyBatis缓存机制的设计与实现如何细粒度地控制你的MyBatis二级缓存
- AOP实现原理机制
- Android反射机制实现与原理
- Redis主键失效 - 原理及实现机制
- 创建简单Eclipse插件实现Axis WebService客户端
- 什么是插件?什么是主题?背后的实现原理是什么?试用至少10个插件及三个主题,并说明其用途与配置过程
- ntp原理及客户端实现
- (一) 并发机制的底层实现原理
- java中注解的原理和实现机制