gpt4 book ai didi

C#使用反射加载多个程序集的实现方法

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章C#使用反射加载多个程序集的实现方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

当开发插件的时候需要用到反射,在客户端动态加载遍历程序集,并调用每个程序集的方法.

创建一个控制台应用程序,首先设计一个接口:

?
1
2
3
4
public interface ISay
  {
    void SaySth();
  }

在控制台应用程序下创建Plugins文件夹,控制台的可执行文件和所有程序集文件都生成在这里。右键控制台项目--"属性"--"生成",把"输出路径"设置成Plugins文件夹.

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

?
1
2
3
4
5
6
7
8
9
10
namespace Assembly1
{
   public class OneSay : ISay
   {
     public void SaySth()
     {
       Console.WriteLine( "我来自程序集1" );
     }
   }
}

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

客户端需要找到所有程序集中所有实现ISay接口的类。其基本思路是:

→找到Plugins文件夹下所有dll后缀的文件 。

→遍历这些文件,根据文件名动态加载程序集 。

→遍历程序集中实现ISay接口的类型,并保存到ISay类型的集合中 。

→客户端遍历ISay类型的集合,调用ISay的接口方法 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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接口的类:

?
1
2
3
4
5
6
7
8
9
10
namespace Assembly2
{
   public class TwoSay : ISay
   {
     public void SaySth()
     {
       Console.WriteLine( "我来自程序集2" );
     }
   }
}

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

再次运行控制台项目.

C#使用反射加载多个程序集的实现方法

以上这篇C#使用反射加载多个程序集的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

最后此篇关于C#使用反射加载多个程序集的实现方法的文章就讲到这里了,如果你想了解更多关于C#使用反射加载多个程序集的实现方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com