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

首頁 > 編程 > C# > 正文

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

2019-10-29 21:27:00
字體:
來源:轉載
供稿:網友
下面小編就為大家帶來一篇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;     }

C#,反射,程序集

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

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

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

再次運行控制臺項目。

C#,反射,程序集

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



注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彭阳县| 彭州市| 同德县| 波密县| 凌海市| 龙川县| 东兴市| 渑池县| 武清区| 无为县| 黎平县| 子长县| 盐山县| 福建省| 全椒县| 桦川县| 辽阳市| 民权县| 荃湾区| 泸溪县| 利川市| 调兵山市| 余姚市| 贵港市| 乌拉特前旗| 奈曼旗| 琼结县| 徐水县| 象山县| 左权县| 铁力市| 沛县| 宁安市| 聂拉木县| 龙山县| 融水| 扬州市| 申扎县| 寻甸| 肥西县| 乡宁县|