日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c#插件式开发

發布時間:2025/4/16 C# 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#插件式开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接著上一篇文章:http://blog.csdn.net/joyhen/article/details/22905481

MEF:http://www.cnblogs.com/tcjiaan/tag/MEF/

原文:http://blog.csdn.net/jam12315/archive/2008/08/18/2791534.aspx

首先,新建一個類庫,里面定義接口,這里定義兩個方法,一個有返回值的,一個無返回值的。

using System; using System.Collections.Generic; using System.Text; namespace IMsg { ///<summary> /// 這是插件必須實現的接口,也是主程序與插件通信的唯一接口 /// 換句話說,主程序只認識插件里的這些方法 ///</summary> publicinterface IMsgPlug {  void OnShowDlg();  string OnShowInfo(); } } 將上面的類庫生成IMsg.dll, 新建一個類庫MYPlugin1,添加剛出的引用,分別新建兩個類來實現IMsg中定義的接口。 using System; using System.Collections.Generic; using System.Text; using IMsg; namespace MYPlugin1 { publicclass myConsole: IMsgPlug {#region IMsgPlug成員publicvoid OnShowDlg() { Console.WriteLine("控制臺調用插件的OnShowDlg方法"); } publicstring OnShowInfo() { return "myConsole"; }#endregion } } using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using IMsg; namespace MYPlugin1 { publicclass MYDlg: Form, IMsgPlug {#region IMsgPlug成員 publicvoid OnShowDlg() { this.Text = "插件子窗體"; this.ShowDialog(); //調用Form的ShowDialog,顯示窗體 } publicstring OnShowInfo() { return "MyDlg"; }#endregion } }

?

將上面的都生成dll, 生成目錄可以設置為新建exe工程的bin目錄plugins文件夾下。Plugins文件夾是新建的,專門存放插件的。 新建一個 WinForm項目來使用剛才的插件.


using System; using System.IO; using System.Linq; using System.Collections; using System.Windows.Forms; using System.Reflection; namespace myConsole { public partial class Form1 : Form { /// <summary> /// 應用程序的主入口點。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } public Form1() { InitializeComponent(); } /// <summary> /// 存放插件的集合 /// </summary> private ArrayList plugins = new ArrayList(); //載入所有插件 private void btnLoadPlug_Click(object sender, EventArgs e) { string[] files = Directory.GetFiles(Application.StartupPath + "\\plugins"); if (files != null) this.listBox1.Items.Clear(); foreach (var f in files) { if (!f.ToUpper().EndsWith(".DLL")) continue; try { Assembly ab = Assembly.LoadFile(f); Type[] t = ab.GetTypes(); foreach (var x in t) { if (x.GetInterface("IMsgPlug") != null) { plugins.Add(ab.CreateInstance(x.FullName)); this.listBox1.Items.Add(x.FullName); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } //調用插件的方法 private void btnExecute_Click(object sender, EventArgs e) { if (this.listBox1.SelectedIndex == -1) return; object selObj = this.plugins[this.listBox1.SelectedIndex]; Type t = selObj.GetType(); MethodInfo OnShowDlg = t.GetMethod("OnShowDlg"); MethodInfo OnShowInfo = t.GetMethod("OnShowInfo"); OnShowDlg.Invoke(selObj, null); object returnValue = OnShowInfo.Invoke(selObj, null); this.lblMsg.Text = returnValue.ToString(); } } }

?

運行結果:


?

此方法用了反射,個人感覺效果不是很好。另外,注意dll對象的依賴,這種問題我在手寫上面demo的時候發現了,首先要保證依賴文件的存在,再一個依賴文件的路徑需要正確。另一點要說下,對反射后的驗證可以做一些加強處理,listbox對象顯示的名字可以通過給dll中對象添加特性標記,然后獲取顯示出來。下一節我們看看MEF的小例子。

最后想說一下,這不是正在意義上的插件式開發,請參閱微軟的MEF和MAF的設計

?

出處:http://blog.csdn.net/joyhen/article/details/40072973

總結

以上是生活随笔為你收集整理的c#插件式开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品一区二区三区三区 | 国产精品毛片一区二区在线看舒淇 | 日韩无马 | 999久久久| 国产欧美日韩专区 | 亚洲h视频在线观看 | 黄色免费一级视频 | 国产成人精品123区免费视频 | 免费在线观看av片 | 狠狠爱av | 黄色网在线 | 男人操女人免费视频 | 女人的黄色片 | 可以看污的网站 | 夜夜天天 | 五月激情婷婷在线 | 99re视频精品| 警察高h荡肉呻吟男男 | 啪啪亚洲 | 婷婷综合亚洲 | 69av视频在线观看 | 波多野结衣视频在线播放 | 国产黄视频在线观看 | 亚洲第一区在线观看 | 99精品热视频| 欧美嘿咻视频 | 在线观看黄色 | 亚洲成年人网站在线观看 | 国内精品国产成人国产三级 | 成人av动漫在线 | 国产毛片一区 | 国产午夜电影在线观看 | 国产精品久久国产精品 | 中文字幕一区二区三区在线观看 | 日韩精品不卡 | 清草视频 | 岛国在线视频 | 少妇精品久久久久久久久久 | 免费成人av片 | 免费成人在线电影 | 日韩一区在线播放 | 性开放网站 | 国产区在线观看视频 | 免费大片黄在线观看视频网站 | 国产免费小视频 | 日本一区二区三区免费在线观看 | 免费观看一区二区 | 久久免费国产精品 | 久月婷婷| 欧美69式性猛交 | 日韩女优在线观看 | 精品日韩制服无码久久久久久 | 欧美成人午夜剧场 | 国产无遮挡免费观看视频网站 | 亚洲AV无码国产日韩久久 | 国产一区二区视频在线免费观看 | 强迫凌虐淫辱の牝奴在线观看 | 影音先锋激情在线 | 欧美一区2区 | 免费一级特黄 | 夜色资源网 | 在线观看国产黄色 | 婷婷综合在线视频 | 久久精品2019中文字幕 | av一级免费 | 松本一香在线播放 | 亚洲天堂中文字幕在线观看 | 亚洲区国产区 | 国产视频在线看 | 国产在线高清视频 | 欧美动态视频 | 韩国三级中文字幕hd浴缸戏 | 亚洲无码精品在线观看 | 日韩电影精品 | 第九色 | 久久久久青草 | av三级网站 | 亚洲av少妇一区二区在线观看 | av香蕉网 | 玖玖视频网 | 99精品久久精品一区二区 | 亚洲国产精品无码专区 | 色一情一乱一区二区三区 | 片黄在线观看 | 免费一级特黄特色大片 | 性生交大片免费看3p | 麻豆理论片 | 免费的一级黄色片 | 日韩影视一区二区三区 | 欧美在线精品一区二区三区 | 亚洲精品视频网 | 亚洲快播| eeuss一区二区 | 综合久久一区二区 | av国产成人 | 51调教丨国产调教视频 | 精品久久久久久亚洲综合网站 | 黄色国产一级片 | 欧美做爰xxxⅹ性欧美大片 |