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
首先,新建一個(gè)類庫(kù),里面定義接口,這里定義兩個(gè)方法,一個(gè)有返回值的,一個(gè)無(wú)返回值的。
using System; using System.Collections.Generic; using System.Text; namespace IMsg { ///<summary> /// 這是插件必須實(shí)現(xiàn)的接口,也是主程序與插件通信的唯一接口 /// 換句話說(shuō),主程序只認(rèn)識(shí)插件里的這些方法 ///</summary> publicinterface IMsgPlug { void OnShowDlg(); string OnShowInfo(); } } 將上面的類庫(kù)生成IMsg.dll, 新建一個(gè)類庫(kù)MYPlugin1,添加剛出的引用,分別新建兩個(gè)類來(lái)實(shí)現(xiàn)IMsg中定義的接口。 using System; using System.Collections.Generic; using System.Text; using IMsg; namespace MYPlugin1 { publicclass myConsole: IMsgPlug {#region IMsgPlug成員publicvoid OnShowDlg() { Console.WriteLine("控制臺(tái)調(diào)用插件的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(); //調(diào)用Form的ShowDialog,顯示窗體 } publicstring OnShowInfo() { return "MyDlg"; }#endregion } }?
將上面的都生成dll, 生成目錄可以設(shè)置為新建exe工程的bin目錄plugins文件夾下。Plugins文件夾是新建的,專門存放插件的。 新建一個(gè) WinForm項(xiàng)目來(lái)使用剛才的插件.?
運(yùn)行結(jié)果:
?
此方法用了反射,個(gè)人感覺(jué)效果不是很好。另外,注意dll對(duì)象的依賴,這種問(wèn)題我在手寫(xiě)上面demo的時(shí)候發(fā)現(xiàn)了,首先要保證依賴文件的存在,再一個(gè)依賴文件的路徑需要正確。另一點(diǎn)要說(shuō)下,對(duì)反射后的驗(yàn)證可以做一些加強(qiáng)處理,listbox對(duì)象顯示的名字可以通過(guò)給dll中對(duì)象添加特性標(biāo)記,然后獲取顯示出來(lái)。下一節(jié)我們看看MEF的小例子。
最后想說(shuō)一下,這不是正在意義上的插件式開(kāi)發(fā),請(qǐng)參閱微軟的MEF和MAF的設(shè)計(jì)
?
出處:http://blog.csdn.net/joyhen/article/details/40072973
總結(jié)
- 上一篇: 如何让你投出的简历得到回应
- 下一篇: C#获取文件的MD5码