上一篇:AOP C#在行动(续1) >>
C#中Plugin的实践
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#可以带参数的实例化方法。
下一篇:C#截取屏幕↑ >>
相关文章:
- · Questioning C# (三)
- · Questioning C# (二)
- · Questioning C# (一)
- · 用C#代码动态改变页面样式
- · 用C#去除代码的SourceSafe管理(续篇)
- · 用C#去除代码的SourceSafe管理
- · 探究Singleton设计模式
- · C#中在应用程序和DLL使用消息
- · [c#]:如何在C#中读写INI文件(五)
- · [c#]:如何在C#中读写INI文件(四)
- · [c#]:如何在C#中读写INI文件(三)
- · [c#]:如何在C#中读写INI文件(二)
- · [c#]:如何在C#中读写INI文件(一)
- · 将人民币的数字表示转化成大写表示(C#版)
- · 使用C#拷贝String到struct
- · C#中如何对当前窗体进行打印预览
- · 设计模式c#语言描述——合成(Composite)模式
- · An Intro to Constructors in C#
- · 巧用头脑思考,提高软件运行效率-浅谈程序算法
- · MapX 控件在C# 中的应用
- · 设计模式c#语言描述——适配器模式
- · 设计模式c#语言描述——建造者模式
- · 中英文语音合成与中文语音识别技术在c#中的应用(二)
- · 中英文语音合成与中文语音识别技术在c#中的应用(一)
- · 通过C#实现集合类纵览.NET Collections及相关技术
- · c#中的反射
- · 在C#中操作XML
- · C#—非对称加密:加密文件
- · c#中的接口
- · Dot Net的调试 - 2
- · C#中的事件
- · Dot Net的调试 - 1
- · C#中使用Spread6.0全攻略
- · 在.NET客户端程序中应用多线程
- · C# Idioms: Safely方法
- · C# Idioms: Enum还是Enum Class(枚举类)
- · c#自定义控件开发实例(2)
- · c#自定义控件开发实例(1)
