c语言中对文件的引用程序集,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 GetSpeakers()

{

List result = new List();

//获取项目根目录下的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#使用反射加载多个程序集的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值