星空网 > 软件开发 > ASP.net

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;    }

  

C#使用反射加载多个程序集

 

再创建一个类库项目Assembly2,添加对控制台项目的引用,并创建实现ISay接口的类:

namespace Assembly2{  public class TwoSay : ISay  {    public void SaySth()    {      Console.WriteLine("我来自程序集2");    }  }}

  

 

右键类库项目Assembly2--"属性"--"生成",把"输出路径"设置成Plugins文件夹,并生成类库项目Assembly2。

 

再次运行控制台项目。

C#使用反射加载多个程序集




原标题:C#使用反射加载多个程序集

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

又出事了!接连3个风波让卖家崩溃!:https://www.ikjzd.com/articles/10508
又一跨境电商新秀,瞄准亚洲新蓝海市场!:https://www.ikjzd.com/articles/105080
最烦亚马逊退货?这里有8个高销量、低退货率的产品!:https://www.ikjzd.com/articles/105081
亚马逊和Flipkart押注印度节日销售:https://www.ikjzd.com/articles/105084
干货!亚马逊新品期,卖家应该如何做好推广?:https://www.ikjzd.com/articles/105085
深圳跨境大卖半年同比转亏,股东将抵押房产!:https://www.ikjzd.com/articles/105086
深圳西乡三月三北帝庙会的千岁盆菜多少钱:https://www.vstour.cn/a/365180.html
TikTok SEO:TikTok会取代谷歌吗?:https://www.kjdsnews.com/a/1836538.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流