最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用反射加載多個(gè)程序集的實(shí)現(xiàn)方法

 更新時(shí)間:2016年06月10日 12:04:18   投稿:jingxian  
下面小編就為大家?guī)硪黄狢#使用反射加載多個(gè)程序集的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

當(dāng)開發(fā)插件的時(shí)候需要用到反射,在客戶端動(dòng)態(tài)加載遍歷程序集,并調(diào)用每個(gè)程序集的方法。

創(chuàng)建一個(gè)控制臺(tái)應(yīng)用程序,首先設(shè)計(jì)一個(gè)接口:

public interface ISay 
 { 
   void SaySth(); 
 } 

在控制臺(tái)應(yīng)用程序下創(chuàng)建Plugins文件夾,控制臺(tái)的可執(zhí)行文件和所有程序集文件都生成在這里。右鍵控制臺(tái)項(xiàng)目--"屬性"--"生成",把"輸出路徑"設(shè)置成Plugins文件夾。

創(chuàng)建類庫(kù)項(xiàng)目Assembly1,添加對(duì)控制臺(tái)項(xiàng)目的引用,并創(chuàng)建實(shí)現(xiàn)ISay接口的類:

namespace Assembly1 
{ 
  public class OneSay : ISay 
  { 
    public void SaySth() 
    { 
      Console.WriteLine("我來自程序集1"); 
    } 
  } 
} 

右鍵類庫(kù)項(xiàng)目Assembly1--"屬性"--"生成",把"輸出路徑"設(shè)置成Plugins文件夾,并生成類庫(kù)項(xiàng)目Assembly1。

客戶端需要找到所有程序集中所有實(shí)現(xiàn)ISay接口的類。其基本思路是:

→找到Plugins文件夾下所有dll后綴的文件

→遍歷這些文件,根據(jù)文件名動(dòng)態(tài)加載程序集

→遍歷程序集中實(shí)現(xiàn)ISay接口的類型,并保存到ISay類型的集合中

→客戶端遍歷ISay類型的集合,調(diào)用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>(); 
      //獲取項(xiàng)目根目錄下的Plugins文件夾 
      string dir = Directory.GetCurrentDirectory(); 
      //遍歷目標(biāo)文件夾中包含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))) 
          { 
            //創(chuàng)建接口類型實(shí)例 
            var isay = Activator.CreateInstance(type) as ISay; 
            if (isay != null) 
            { 
              result.Add(isay); 
            } 
          } 
        } 
      } 
      return result; 
    }

1

再創(chuàng)建一個(gè)類庫(kù)項(xiàng)目Assembly2,添加對(duì)控制臺(tái)項(xiàng)目的引用,并創(chuàng)建實(shí)現(xiàn)ISay接口的類:

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

右鍵類庫(kù)項(xiàng)目Assembly2--"屬性"--"生成",把"輸出路徑"設(shè)置成Plugins文件夾,并生成類庫(kù)項(xiàng)目Assembly2。

再次運(yùn)行控制臺(tái)項(xiàng)目。

2

以上這篇C#使用反射加載多個(gè)程序集的實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 帶你了解C++中vector的用法

    帶你了解C++中vector的用法

    大家好,本篇文章主要講的是帶你了解C++中vector的用法,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 深入探索C++ string的底層實(shí)現(xiàn)

    深入探索C++ string的底層實(shí)現(xiàn)

    C語言中的字符串是以字符數(shù)組的形式存儲(chǔ)的,每個(gè)字符占用一個(gè)字節(jié)的內(nèi)存空間,本文我們將和大家一起深入探討一下string的底層實(shí)現(xiàn),感興趣的小伙伴快來和小編一起吧
    2023-08-08
  • C語言數(shù)據(jù)結(jié)構(gòu)深入探索順序表

    C語言數(shù)據(jù)結(jié)構(gòu)深入探索順序表

    順序表,全名順序存儲(chǔ)結(jié)構(gòu),是線性表的一種,線性表用于存儲(chǔ)邏輯關(guān)系為“一對(duì)一”的數(shù)據(jù),順序表自然也不例外,不僅如此,順序表對(duì)數(shù)據(jù)的物理存儲(chǔ)結(jié)構(gòu)也有要求,跟隨下文來具體了解吧
    2022-03-03
  • C語言中的getchar()使用詳解

    C語言中的getchar()使用詳解

    大家好,本篇文章主要講的是C語言中的getchar()使用詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C++核心編程之內(nèi)存分區(qū)模型詳解

    C++核心編程之內(nèi)存分區(qū)模型詳解

    這篇文章主要為大家介紹了C++核心編程中內(nèi)存分區(qū)模型,C++程序在執(zhí)行時(shí),將內(nèi)存大方向分為四個(gè)區(qū)域,代碼區(qū),全局區(qū),棧區(qū),堆區(qū),文章通過代碼示例介紹的非常詳細(xì),感興趣的同學(xué)可以參考閱讀下
    2023-07-07
  • Qt獲取git版本信息的具體方法

    Qt獲取git版本信息的具體方法

    這篇文章主要介紹了Qt獲取git版本信息的具體方法,今天又碰到這個(gè)問題了,想根據(jù)具體的git版本信息做代碼問題確認(rèn),文中有詳細(xì)的解決方案,具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-04-04
  • C++中g(shù)etline()的用法詳解

    C++中g(shù)etline()的用法詳解

    這篇文章主要介紹了C++中g(shù)etline()的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C++?容器?Vector?的使用方法

    C++?容器?Vector?的使用方法

    這篇文章主要介紹了C++?容器?Vector?的使用方法,Vector?是一個(gè)能夠存放任意類型的動(dòng)態(tài)數(shù)組,有點(diǎn)類似數(shù)組,是一個(gè)連續(xù)地址空間,下文更多詳細(xì)內(nèi)容的介紹,需要的小伙伴可以參考一下
    2022-06-06
  • C語言全局變量和局部變量的示例代碼

    C語言全局變量和局部變量的示例代碼

    本文主要介紹了C語言全局變量和局部變量的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 基于C語言編寫一個(gè)多功能計(jì)算器

    基于C語言編寫一個(gè)多功能計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了如何基于C語言編寫一個(gè)多功能計(jì)算器,除了四則混合運(yùn)算之外,還支持三角函數(shù)和絕對(duì)值等函數(shù),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08

最新評(píng)論

长春市| 依兰县| 兴国县| 邢台县| 兴海县| 曲周县| 林州市| 徐州市| 周口市| 抚松县| 汨罗市| 铜陵市| 渭南市| 丹东市| 湘乡市| 黎城县| 西安市| 来宾市| 定结县| 临汾市| 娄底市| 台安县| 曲阜市| 克山县| 瑞金市| 吉首市| 高州市| 施秉县| 塔城市| 乌什县| 四平市| 丹东市| 安达市| 安庆市| 庄河市| 余姚市| 江北区| 万盛区| 江油市| 平邑县| 家居|