EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 512|回复: 0
打印 上一主题 下一主题

[架构模式] 插件式程序开发及其应用(C#) - 2(完成)

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12406

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-10 10:56:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天写出了个基于Assembly的插件式结构模型,整体上有三个部分组成:
1)插件协议(IPlugin)
    定义了作为插件必须实现的几个方法(见下面的代码),并通过这个接口来判断;另外包含了对插件的一些基本操作,定义在pluginUtil类中
using System;
using System.Data;
using System.Windows.Forms;
namespace PluginProtocol
{
/// <summary>
/// 插件服务接口
/// </summary>
public interface IPlugin
{
  
  //创建主画面
  System.Windows.Forms.Control CreateMainForm(DataSet dsPersonInfo, Form formOrder, object[] args);
  //获取版本号
  string GetVersion();
  //获取关于信息
  string GetAboutInfo();
  //获取插件名称
  string GetPluginName();
  
}
}
2)各种插件
  和一般的类库开发没什么不同,只是增加了一个基于IPlugin的类,实现一些必须实现的接口,需要注意的是,CreateMainForm方法是接口的入口
3)主程序
    要调用接口非常简单,只要两句话:
   PluginProtocol.IPlugin p = PluginProtocol.PluginUtil.GetPluginObject(@"E:/开发/测试/pluginTest/Plugin1/bin/Debug/Plugin1.dll");
   Control c = p.CreateMainForm(null, this, null);
--------------
以上模型可以实现动态加载插件,但卸载插件却碰到些问题,后来查了些资料,原来是Assembly本身不提供Unload方法的,不过,可以通过别的方法模拟这个Unload(不太爽:()
参考以下资料
http://www.microsoft.com/china/msdn/archives/library/dncscol/html/csharp05162002.asp
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-27 16:51

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表