灵活正确的实现.NET插件机制(2)
private arraylist channelslist = new arraylist();
private loadchannels()
{ arraylist channelsconfig = (arraylist)configurationsettings.getconfig( "channels" );foreach(hashtable config in channelsconfig)
{ string channeltype = (string) config["channeltype"];
ichannel channel = (ichannel) commonutils.loadobject(channeltype, typeof(ichannel)。fullname, new object[]{config});if(channel == null)
continue;
channelslist.add(channel);}
也可以遍历指定的插件目录,并载入所有符合要求的插件,例如:
public iplugin[] loadallplugin(string plugindir)
{ // 设置默认的插件目录if(plugindir == null plugindir == "")
plugindir = "./plugins";
// 获取插件接口名称string interfacename = typeof(iplugin)。fullname;
// 用于存放插件的数组arraylist arr = new arraylist();
// 遍历插件目录(假设插件为dll文件)
foreach(string file in directory.getfiles(plugindir, "*.dll"))
{ // 载入插件文件assembly asm = assembly.loadfile(file);// 遍历导出的插件类foreach(type t in asm.getexportedtypes())
{ // 载入插件,如果插件不符合指定的接口,则返回null iplugin plugin = loadobject(t.fullname, interfacename, null) as iplugin;
if(plugin != null)
arr.add(plugin);}
// 返回插件return (iplugin[])arr.toarray(typeof(iplugin));}
Tag: 插件
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。