国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C#使用反射加載多個程序集的實現方法

2020-01-26 14:33:37
字體:
來源:轉載
供稿:網友

當開發插件的時候需要用到反射,在客戶端動態加載遍歷程序集,并調用每個程序集的方法。

創建一個控制臺應用程序,首先設計一個接口:

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

1

再創建一個類庫項目Assembly2,添加對控制臺項目的引用,并創建實現ISay接口的類:

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

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

再次運行控制臺項目。

2

以上這篇C#使用反射加載多個程序集的實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 天水市| 常德市| 金乡县| 龙江县| 大英县| 贵州省| 璧山县| 确山县| 洞口县| 江陵县| 贵德县| 武宁县| 陕西省| 绥阳县| 湾仔区| 腾冲县| 彭州市| 金山区| 太仆寺旗| 泰兴市| 枣庄市| 措美县| 温泉县| 泽普县| 贡嘎县| 富裕县| 张掖市| 吴堡县| 青神县| 慈溪市| 洛隆县| 西昌市| 南通市| 仪陇县| 连山| 莱阳市| 尚义县| 宽城| 苍溪县| 日照市| 横峰县|