灵活正确的实现.NET插件机制(2)

分类: asp.net   出处:iocblog整理  更新时间:2008-12-30   添加到收藏  
   (来源www.iocblog.net)
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));}

上一页 [1] [2]


Tag: 插件



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。