C#实现插件式开发的一个Demo分享
2011-03-18 16:13
609 查看
做winform程序,很多时候都需要用到插件式的,所以本人做了一个Demo,思路跟网上思路基本一致,现在共享出来如有需要的朋友可以下载。
申明:部分代码来源于网上,当然思路也是,呵呵
原理很简单:
一:定义插件接口
二:实现插件接口并建立不同工项目,使其在生成时生成不同的DLL
三:主程序运行时根据接口名利用反射对插件目录的DLL进行加载,加载完成后便可以使用插件接口定义的方法或属性了。
下面上几张图,有兴趣的朋友可以先看看,觉得值得一看的朋友可以下载。
项目结构:
Iplugin的实现类PosPlugin类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using WinDemo.Core;
using System.Windows.Forms;
namespace DefaultPlugin
{
[PluginInfo("Default","1.0","XH","www.cnporter.com",true,2)]
public class Default : WinDemo.Core.Iplugin
{
private Dictionary<string, EventHandler> _ChildNodes = new Dictionary<string, EventHandler>();
private LeftNav frmLeftNav = new LeftNav();
public static ILoadForm Formloader ;
public Default()
{
_ChildNodes.Add("菜单五", (sender,e) =>
{
MessageBox.Show(sender.ToString());
});
_ChildNodes.Add("菜单四", (sender, e) =>
{
MessageBox.Show(sender.ToString());
});
_ChildNodes.Add("菜单三", (sender, e) =>
{
MessageBox.Show(sender.ToString());
});
_ChildNodes.Add("菜单二", (sender, e) =>
{
MessageBox.Show(sender.ToString());
});
_ChildNodes.Add("菜单一", (sender, e) =>
{
FormLoader.LoadNavFrm(frmLeftNav);
});
}
public Image ModulePicture
{
get
{
return ((System.Drawing.Image)(ImageResource.Index));
}
}
public Image ModulePictureEnter
{
get
{
return ((System.Drawing.Image)(ImageResource.IndexEnter));
}
}
public Image ModulePictureClick
{
get
{
return ((System.Drawing.Image)(ImageResource.IndexClick));
}
}
public string ModuleName
{
get
{
return "首页";
}
}
public Dictionary<string, EventHandler> ChildNodes
{
get
{
return _ChildNodes;
}
}
public bool IsLoad
{
get;
set;
}
public ILoadForm FormLoader
{
get
{
return Formloader;
}
set
{
Formloader = value;
}
}
public PluginInfoAttribute PluginInfo
{
get;
set;
}
}
}
此图现在有两个插件
运行效果如下
源码下载
申明:部分代码来源于网上,当然思路也是,呵呵
原理很简单:
一:定义插件接口
二:实现插件接口并建立不同工项目,使其在生成时生成不同的DLL
三:主程序运行时根据接口名利用反射对插件目录的DLL进行加载,加载完成后便可以使用插件接口定义的方法或属性了。
下面上几张图,有兴趣的朋友可以先看看,觉得值得一看的朋友可以下载。
项目结构:
Iplugin的实现类PosPlugin类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using WinDemo.Core;
using System.Windows.Forms;
namespace DefaultPlugin
{
[PluginInfo("Default","1.0","XH","www.cnporter.com",true,2)]
public class Default : WinDemo.Core.Iplugin
{
private Dictionary<string, EventHandler> _ChildNodes = new Dictionary<string, EventHandler>();
private LeftNav frmLeftNav = new LeftNav();
public static ILoadForm Formloader ;
public Default()
{
_ChildNodes.Add("菜单五", (sender,e) =>
{
MessageBox.Show(sender.ToString());
});
_ChildNodes.Add("菜单四", (sender, e) =>
{
MessageBox.Show(sender.ToString());
});
_ChildNodes.Add("菜单三", (sender, e) =>
{
MessageBox.Show(sender.ToString());
});
_ChildNodes.Add("菜单二", (sender, e) =>
{
MessageBox.Show(sender.ToString());
});
_ChildNodes.Add("菜单一", (sender, e) =>
{
FormLoader.LoadNavFrm(frmLeftNav);
});
}
public Image ModulePicture
{
get
{
return ((System.Drawing.Image)(ImageResource.Index));
}
}
public Image ModulePictureEnter
{
get
{
return ((System.Drawing.Image)(ImageResource.IndexEnter));
}
}
public Image ModulePictureClick
{
get
{
return ((System.Drawing.Image)(ImageResource.IndexClick));
}
}
public string ModuleName
{
get
{
return "首页";
}
}
public Dictionary<string, EventHandler> ChildNodes
{
get
{
return _ChildNodes;
}
}
public bool IsLoad
{
get;
set;
}
public ILoadForm FormLoader
{
get
{
return Formloader;
}
set
{
Formloader = value;
}
}
public PluginInfoAttribute PluginInfo
{
get;
set;
}
}
}
此图现在有两个插件
运行效果如下
源码下载
相关文章推荐
- C#实现插件式开发的一个Demo分享
- C#实现插件式开发的一个Demo分享
- C#实现插件式开发的一个Demo分享
- 分享一个Asp.net(C#)开发的Wiki Engine
- C# 优化基于插件的开发框架实现Ribbon界面与功能的分离附DEMO
- 分享一个C#实现的迷宫生成程序,继续演示LINQ语法在C#中的运用
- 分享一个Asp.net(C#)开发的Wiki Engine
- C#中一个高性能异步socket封装库的实现思路分享
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 几十套业务系统集中统一授权管理实现经验分享
- .net和C#基于nethereum开发以太坊的一个demo
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
- android ndk开发(二)实现一个官方demo
- C# 基于插件的开发框架实现Ribbon界面与功能的分离附DEMO
- 分享一个C#实现的快速排序算法
- 独立开发 一个社交 APP 的架构分享 (已实现)
- Android开发中实现用户注册和登陆的小demo分享
- 分享:我用C#开发了一个分布式可开发的开放式云平台,能把几万台电脑做成一个集群
- 分享一个改进后的冒泡排序算法(C#实现)
- [每天一个demo]用c#实现简单的xml操作代码
- 分享一个本人开发的angularjs+bootstrap+Spring+mybatis实现的java web系统项目