您的位置:首页 > 编程语言 > C#

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;

}

}

}

此图现在有两个插件



运行效果如下



源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐