麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

基于.net 職責鏈來實現 插件模式

2019-11-17 01:59:16
字體:
來源:轉載
供稿:網友
基于.net 職責鏈來實現 插件模式
    •   插件式的例子
  1. QQ電腦管家,有很多工具列表,點一下工具下載后就可以開始使用了
  2. eclipse,X Server等等
    •   插件式的好處
  1. 插件降低框架的復雜性,把擴展功能從框架中剝離出來
  2. 讓第三方有機會來擴展程序的功能
    •   思路

公開一個插件接口,如果.DLL或.EXE的代碼中有繼承這個接口就將其示為插件,并將這些插件放在同一目錄。運行程序的時候掃描目 錄并通過反射判斷.DLL或.EXE中是否存在該接口,若存在,則當作插件加載進來。如下圖示

  • 基于.net職責鏈來實現插件模式

1.定義命令接口

     public interface ICommand    {        ServerReturn execute();        ServerReturn Rollback();    }

獲取當前目錄下繼承該接口的方法

        public  List<ICommand> CommandList()        {            List<ICommand> ICommandList = new List<ICommand>();            string[] files = Directory.GetFiles(System.IO.Directory.GetCurrentDirectory());            int i = 0;            foreach (string file in files)            {                string ext = file.Substring(file.LastIndexOf("."));                if (ext != ".dll") continue;                try                {                    // 加載插件                    Assembly tmp = Assembly.LoadFile(file);                    Type[] types = tmp.GetTypes();                    bool ok = false;                    foreach (Type t in types)                        if (IsValidCommand(t))                        {                            // 通過反射實例化                            ICommand plugin = (ICommand)tmp.CreateInstance(t.FullName);                            ICommandList.Add(plugin);                            ok = true;                            if (ok) break;                        }                }                catch (Exception err)                {                    throw err;                }            }            return ICommandList;        }        /// <summary>        /// 判斷DLL中是否繼承了ICommand接口        /// </summary>        /// <param name="t"></param>        /// <returns></returns>        PRivate static bool IsValidCommand(Type t)        {            bool ret = false;            Type[] interfaces = t.GetInterfaces();            foreach (Type theInterface in interfaces)            {                if (theInterface.FullName == "ClassDemo.ICommand")                {                    ret = true;                    break;                }            }            return ret;        }

職責鏈執行方法組

        /// <summary>        /// 方法執行        /// </summary>        public void exec()        {            List<ICommand> list = new List<ICommand>();            foreach( ICommand demo in list)            {                if(!demo.execute().isSurccess)                {                    demo.Rollback();                    return;                }            }        }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 午夜啪视频 | 国产自在线 | 成年人网站视频免费 | 亚洲第一视频 | 欧美日韩一区三区 | xvideos korean| 欧美精品久久久久久久久久 | 国产精品久久久久久久久久10秀 | 中文字幕一二三区芒果 | 久久精品成人影院 | 男男啪羞羞视频网站 | 亚洲二区不卡 | 国产91在线免费 | 99精品视频在线免费观看 | 羞羞的视频在线 | 久草在线视频网 | av日韩一区二区 | 久久久久久久一区二区三区 | 亚洲午夜网站 | 蜜桃欧美性大片免费视频 | 亚洲成人在线视频网 | 久久亚洲成人 | 久久久婷婷一区二区三区不卡 | 国产精品久久久久久一区二区三区 | 超碰97最新| 看国产一级毛片 | 国产成人精品一区在线播放 | 久久精品视频免费观看 | 国产免费网站视频 | 国产一级毛片国语版 | 成人在线视频免费看 | 国产成人精品自拍视频 | 久久人人爽人人爽人人片av高请 | 蜜桃视频网站在线观看 | 中文字幕一区久久 | 成人在线视频在线观看 | 国产福利视频在线观看 | 一级在线| 精品一区二区电影 | 奶子吧naiziba.cc免费午夜片在线观看 | 久久精品毛片 |