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<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站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-09-27 16:47:50

C#使用反射加载多个程序集的实现方法_C 语言的相关文章

现在hao123网站数据采用异步加载的方式,有没有方法可以比较简单的抓取或解析出来

问题描述 现在hao123网站数据采用异步加载的方式,有没有方法可以比较简单的抓取或解析出来 现在hao123网站数据采用异步加载的方式,用jsoup或httpclient都无法将页面内容取出来,是我没有用来jsoup或httpclient还是解析不了或抓不了,有没有什么方法可以解析.求大神指点.

加载外部文本文件的3种方法

加载 不管哪种方法,文本文件要和主文件在同一目录下,再就是在这儿的文本文件名为 b.txt. *第一种方法 txt= 1.创建一个文本框,给此文本框一个变量名txt: 2.文本格式为:动态: 3.选:多行输入 4.在第一帧上增加脚本语言.(按F9) loadVariablesNum("b.txt",0);//b.txt是文件名,0是场景中的根目录 然后打开poems.txt文件,在记事本里输入:txt= 注意:在加载之前对文本文件进行转换,另存为Unicode编码格式. *第二种方法

Vista下启动无加载项的IE浏览器的方法

Vista 下启动无加载项的IE浏览器的方法.IE在无加载的状态下可以判断浏览器是否由于加载了插件.恶意软件以及 ActiveX 控件等而引起了网页工作不正常.浏览器无法工作.软件冲突等问题. 具体步骤如下: (1)开始-〉所有程序-〉附件-〉系统工具-〉Internet Explorer(无加载项)(如图) 点击打开就是了. (2)启动了无加载的IE在下面会提示:如下图的内容(如图) (3)解决自己想解决的问题. (4)如果问题解决了重新启动,双击桌面上的IE即是我们平时使用的IE了.

JS实现窗口加载时模拟鼠标移动的方法

  本文实例讲述了JS实现窗口加载时模拟鼠标移动的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 function judge(){ alert("mousemove"); document.onmousemove = null;//撤销鼠标移动模拟 } function simulateMouseMove(){//模拟鼠标移动 document.onmousemove = judge; } window.onload=simulateMouseMo

Bootstrap Table从服务器加载数据进行显示的实现方法_javascript技巧

Bootstrap-Table是一个Boostrap的表格插件,能够将JSON数据直接显示在表格中.当然,这需要配置一些参数并进行初始化表格才行.其官方网站地址为:http://bootstrap-table.wenzhixin.net.cn/.里面可以下载使用所需的JS和CSS文件,以及参考文档和例子.         Bootstrap-Table显示数据到表格的方式有两种,一种是客户端(client)模式,一种是服务器(server)模式.         所谓客户端模式,指的是在服务器中

JQ获取动态加载的图片大小的正确方法分享_jquery

有一些很容易出错的获取动态加载的图片的尺寸的方法, 之所以出错, 主要原因是:你在代码在图片从网页上下载完毕之前就调用了, 这种情况在本机开发时不太容易发现.jQuery load()事件处理的BUG, 当图片是从浏览器缓存取得时, 获取的是错误的尺寸.错误的代码是:(错误)在添加了HTML之后立即调用代码获取尺寸 复制代码 代码如下: var html = ''; $('#my_div').html(html); var width = $('#my_div img').width(); //

flash 同步加载多个外部swf的方法

flash 同步加载多个外部swf的方法 //参数分别是文件数量,起点x,起点y,宽度比例,高度比例,排列间距.   //注意外部文件分别为0.swf,1.swf,2.swf.........递增的,其实稍微改下,加载图片也一样 function manyloadmovie(num, x, y, xscal, yscal, dis) {   for (var i = 0; i<num; i++) {   var temp = createemptymovieclip("temp"

关于webview加载html文件,vedio.play()方法无效问题

问题描述 关于webview加载html文件,vedio.play()方法无效问题 html文件代码如下:<!DOCTYPE html> function load() {var myvideo = document.getElementById(""myvideo"");myvideo.style.width = document.body.clientWidth + ""px"";myvideo.style.h

动态加载JavaScript文件的两种方法_javascript技巧

这篇文章主要为大家详细介绍了动态加载JavaScript文件的两种方法,感兴趣的小伙伴们可以参考一下 第一种便是利用ajax方式,把script文件代码从背景加载到前台,而后对加载到的内容经过eval()实施代码.第二种是,动静创建一个script标签,配置其src属性,经过把script标签插入到页面head来加载js,相当于正在head中写了一个<script src="..."></script>,只可是这个script标签是用js动静创建的 比喻说是我们