C#使用反射加载多个程序集的实现方法
当开发插件的时候需要用到反射,在客户端动态加载遍历程序集,并调用每个程序集的方法。
创建一个控制台应用程序,首先设计一个接口:
public interface ISay { void SaySth(); }
在控制台应用程序下创建Plugins文件夹,控制台的可执行文件和所有程序集文件都生成在这里。右键控制台项目--"属性"--"生成",把"输出路径"设置成Plugins文件夹。
创建类库项目Assembly1,添加对控制台项目的引用,并创建实现ISay接口的类:
namespace Assembly1 { public class OneSay : ISay { public void SaySth() { Console.WriteLine("我来自程序集1"); } } }
右键类库项目Assembly1--"属性"--"生成",把"输出路径"设置成Plugins文件夹,并生成类库项目Assembly1。
客户端需要找到所有程序集中所有实现ISay接口的类。其基本思路是:
→找到Plugins文件夹下所有dll后缀的文件
→遍历这些文件,根据文件名动态加载程序集
→遍历程序集中实现ISay接口的类型,并保存到ISay类型的集合中
→客户端遍历ISay类型的集合,调用ISay的接口方法
class Program { static void Main(string[] args) { foreach (var say in GetSpeakers()) { say.SaySth(); } } static List<ISay> GetSpeakers() { List<ISay> result = new List<ISay>(); //获取项目根目录下的Plugins文件夹 string dir = Directory.GetCurrentDirectory(); //遍历目标文件夹中包含dll后缀的文件 foreach (var file in Directory.GetFiles(dir + @"\", "*.dll")) { //加载程序集 var asm = Assembly.LoadFrom(file); //遍历程序集中的类型 foreach (var type in asm.GetTypes()) { //如果是ISay接口 if (type.GetInterfaces().Contains(typeof (ISay))) { //创建接口类型实例 var isay = Activator.CreateInstance(type) as ISay; if (isay != null) { result.Add(isay); } } } } return result; }
再创建一个类库项目Assembly2,添加对控制台项目的引用,并创建实现ISay接口的类:
namespace Assembly2 { public class TwoSay : ISay { public void SaySth() { Console.WriteLine("我来自程序集2"); } } }
右键类库项目Assembly2--"属性"--"生成",把"输出路径"设置成Plugins文件夹,并生成类库项目Assembly2。
再次运行控制台项目。
以上这篇C#使用反射加载多个程序集的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
栏 目:C语言
下一篇:C语言的fork函数在Linux中的进程操作及相关面试题讲解
本文标题:C#使用反射加载多个程序集的实现方法
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/2273.html
您可能感兴趣的文章
- 04-02func函数+在C语言 func函数在c语言中
- 01-10使用OpenGL实现3D立体显示的程序代码
- 01-10使用C++实现全排列算法的方法详解
- 01-10深入Main函数中的参数argc,argv的使用详解
- 01-10C++大数模板(推荐)
- 01-10浅谈C/C++中的static与extern关键字的使用详解
- 01-10显示任何进程加载的DLL文件的代码
- 01-10基于C语言fflush()函数的使用详解
- 01-10linux c 查找使用库的cflags与libs的方法详解
- 01-10深入sizeof的使用详解
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-10SublimeText编译C开发环境设置
- 01-11ajax实现页面的局部加载
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10C#中split用法实例总结
- 04-02jquery与jsp,用jquery