标题: Plugin在C#中的一种实践源代码分析
lonjew
元帅
Rank: 1



UID 73191
精华 1
积分 30615
帖子 14941
威望 3
金币 14931
热心 12
阅读权限 100
注册 2008-1-28
状态 离线
Plugin在C#中的一种实践源代码分析

  Plugin是一种相当灵活的可扩充、模块化机制,微软的Application Block不少采用了Plugin结构,本文讨论Plugin在C#中的一种实践。
      Plugin是基于统一的接口,在C#中采用Reflection机制产生实现IPlugin的对象。假定接口为IPlugin,以下代码块示意动态产生IPlugin对象的代码段,其中dllName是实现IPlugin接口类的dll文件名:
      public IPlugin LoadPlugin(string dllName)
      {
       Assembly asm = AppDomain.CurrentDomain.Load(dllName);
       foreach(Type t in asm.GetTypes()) {
         foreach(Type iface in t.GetInterfaces()) {
           if(iface.Equals(typeof(IPlugin))) {
              return (System.Activator.CreateInstance(t)) as IPlugin;
            }
         }
        }
       return null;
      }
  Java也有Reflection机制,实现Plugin也很简单,大致是(IPlugin)Class.forName(className).newInstance()的样子。C++由于Reflection机制,可以采用DLL模拟,在DLL中export一个全局函数和interface,该全局函数返回实现了接口的对象的指针。
  微软有关于Provider Pattern的文章,文中提供了另一种C#可以带参数的实例化方法。

顶部
[广告] 免费域名(Free Subdomain) 免费空间(Free hosting) PR查询(Google Pagerank)



当前时区 GMT+8, 现在时间是 2008-10-11 10:16
信产部ICP备案:京ICP备05066424号 北京市公安局网监备案:1101050648号

Powered by Discuz! 5.5.0
清除 Cookies - 联系我们 - 网友俱乐部 - Archiver - WAP