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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C#使用反射加載多個程序集

2019-11-17 02:51:49
字體:
供稿:網(wǎng)友

C#使用反射加載多個程序集

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

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

    public interface ISay
    {
        void SaySth();
    }

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

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

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

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

客戶端需要找到所有程序集中所有實(shí)現(xiàn)ISay接口的類。其基本思路是:→找到Plugins文件夾下所有dll后綴的文件→遍歷這些文件,根據(jù)文件名動態(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>();
            //獲取項目根目錄下的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)建一個類庫項目Assembly2,添加對控制臺項目的引用,并創(chuàng)建實(shí)現(xiàn)ISay接口的類:

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

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

再次運(yùn)行控制臺項目。

2


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 石门县| 佛山市| 靖边县| 云林县| 信宜市| 襄汾县| 鄂伦春自治旗| 德钦县| 雅安市| 监利县| 吉木萨尔县| 个旧市| 阳曲县| 乐陵市| 疏勒县| 乌兰浩特市| 龙游县| 金湖县| 新巴尔虎右旗| 南京市| 宜川县| 大余县| 抚顺市| 余庆县| 彭州市| 榆社县| 阳东县| 雅江县| 崇明县| 海阳市| 华安县| 柳州市| 顺义区| 苏尼特右旗| 关岭| 沙洋县| 玉环县| 昂仁县| 黎城县| 绥江县| 舟曲县|