欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

創(chuàng)建一個控制臺應用程序,首先設(shè)計一個接口:

public interface ISay 
 { 
   void SaySth(); 
 } 

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

創(chuàng)建類庫項目Assembly1,添加對控制臺項目的引用,并創(chuàng)建實現(xiàn)ISay接口的類:

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

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

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

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

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

→遍歷程序集中實現(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>(); 
      //獲取項目根目錄下的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))) 
          { 
            //創(chuàng)建接口類型實例 
            var isay = Activator.CreateInstance(type) as ISay; 
            if (isay != null) 
            { 
              result.Add(isay); 
            } 
          } 
        } 
      } 
      return result; 
    }

1

再創(chuàng)建一個類庫項目Assembly2,添加對控制臺項目的引用,并創(chuàng)建實現(xiàn)ISay接口的類:

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

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

再次運行控制臺項目。

2

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

相關(guān)文章

  • 如何解決C語言,函數(shù)名與宏沖突

    如何解決C語言,函數(shù)名與宏沖突

    本文介紹了“如何解決C語言,函數(shù)名與宏沖突”,需要的朋友可以參考一下
    2013-03-03
  • OpenCV畫任意圓弧曲線

    OpenCV畫任意圓弧曲線

    這篇文章主要為大家詳細介紹了OpenCV畫任意圓弧曲線,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 詳解C++11 線程休眠函數(shù)

    詳解C++11 線程休眠函數(shù)

    這篇文章主要介紹了C++11 線程休眠函數(shù)的相關(guān)資料,幫助大家更好的理解和學習C++11,感興趣的朋友可以了解下
    2020-10-10
  • C++保存HBITMAP為位圖文件的實現(xiàn)方法

    C++保存HBITMAP為位圖文件的實現(xiàn)方法

    這篇文章主要介紹了C++保存HBITMAP為位圖文件的實現(xiàn)方法,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2021-01-01
  • C語言學習進階篇之萬字詳解指針與qsort函數(shù)

    C語言學習進階篇之萬字詳解指針與qsort函數(shù)

    之前的指針詳解中,提到過qsort函數(shù),這個函數(shù)是用來排序的,下面這篇文章主要給大家介紹了關(guān)于C語言指針與qsort函數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 一文學會c語言結(jié)構(gòu)體的定義和使用方法

    一文學會c語言結(jié)構(gòu)體的定義和使用方法

    數(shù)組是一種數(shù)據(jù)形式,其特點是多個相同類型的元素集合起來,結(jié)構(gòu)體是另一種重要的數(shù)據(jù)形式,特點是將不同類型的成員組合起來,下面這篇文章主要給大家介紹了關(guān)于c語言結(jié)構(gòu)體的定義和使用方法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • C語言宏定義結(jié)合全局變量的方法實現(xiàn)單片機串口透傳模式

    C語言宏定義結(jié)合全局變量的方法實現(xiàn)單片機串口透傳模式

    今天小編就為大家分享一篇關(guān)于C語言宏定義結(jié)合全局變量的方法實現(xiàn)單片機串口透傳模式,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 詳解C語言中typedef和#define的用法與區(qū)別

    詳解C語言中typedef和#define的用法與區(qū)別

    這篇文章主要給大家介紹了關(guān)于C語言中typedef和#define的的用法、區(qū)別,以及陷阱。文中通過示例進行了詳細講解,感興趣的小伙伴可以了解一下
    2022-07-07
  • C++中隊列queue的用法實例詳解

    C++中隊列queue的用法實例詳解

    隊列先進先出,即只能在容器的末尾添加新元素,只能從頭部移除元素,下面這篇文章主要給大家介紹了關(guān)于C++中隊列queue用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • C++實現(xiàn)新年賀卡程序

    C++實現(xiàn)新年賀卡程序

    這篇文章主要為大家詳細介紹了C++實現(xiàn)賀卡程序,C++應用程序編寫的雪花賀卡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04

最新評論