积分不够,无法下载资源,请看这里! 争做班主任,享特权 ! 如何在本论坛上传大文件? 有好源码,想换点钱,来这里!
1/1页1 跳转到查看:293
发新话题 回复该主题

C#中Plugin的实践

C#中Plugin的实践

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#可以带参数的实例化方法。
、哭┈゛.並不代表Wo屈服х. 退一步...並不象徵Wo認輸..→.放手.ǐ.o.並不表示Wo放棄.正如Wo微笑.並不意味Wo快樂┈┊

TOP

 
1/1页1 跳转到
发表新主题 回复该主题