精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺析C#插件式程序開發經驗

開發 后端
本文作者將給大家分享一下C#插件式程序開發經驗,在共同討論的過程中能共同進步。

在網上找了下插件式編程的資料,這里自己先借鑒下別人的,同時發現有自己的看法,不過由于本人水平有限,不一定有參考價值,寫出來一方面是為了總結自己,以求提高,另一方面也希望各為朋友看到我的不足,給我提出寶貴意見。

什么是插件式編程

提起插件式,我們首先想到的是firefox,用過firefox的人都知道它是一個插件式程序。當一個功能需要,完全可以從網上下載一個插件后,重啟后,就能使用。這個功能給我們帶來許多的方便之處,這就是插件式程序的好處。

插件的本質在于不修改程序主體(平臺)的情況下對軟件功能進行拓展與加強,當插件的接口公開后,任何公司或個人都可以制作自己的插件來解決一些操作上的不便或增加新功能,也就是真正意義上實現“即插即用”軟件開發。

平臺+插件軟件結構是將一個待開發的目標軟件分為兩部分,一部分為軟件的主體或框架,可定義為平臺,這是預先編譯后的程序。另一部分為功能或補充模塊,可定義為插件。這個就是后來要進行安裝的插件程序。

假設你的程序已經部署在用戶的計算機上,并且能夠正常運行了。但是有一天,用戶打來電話——他們需要增加新的功能。確定了用戶的需求后,你竟然發現原有的軟件架構已經無法勝任新增任務的需求——你需要重新設計這個應用了!但問題是,就算你又用了一個開發周期完成了用戶需要的應用,切不能保證用戶的需求不會再次變更。也就是說,需求蔓延的可能性依然存在。因此,這種情況下插件架構更能顯示出它的優越性。

可以這么說,用它可以帶來方便的地方,而且開發它,也很簡單。而且這樣的主程序根本就不需要改動。需要插件時,拿來就能用,插件更新時,也只需更新這個插件即可。

從程序開發這角度,一般是先開發主程序,決定哪些功能由主程序來完成,然后再建立接口,申明接口的內容,這些內容決定著插件功能的擴展,及方向的。這些都是有主程序開發者預先準備好的。插件開發者,從主程序開發者那里得到接口的內容,并書寫繼承這些接口的類,來完成具體的功能。

下面來寫個例子,這個例子沒實際意義,純屬學習思想。例子是網上的經過自己改造的,發現別人某些地方不合理。

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

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. namespace IMsg{     
  5.  /// <summary>     
  6.  /// 這是插件必須實現的接口,也是主程序與插件通信的***接口      
  7. /// 換句話說,主程序只認識插件里的這些方法     
  8.  /// </summary>  public  interface IMsgPlug     
  9.  {         
  10.  void OnShowDlg();      
  11.     string OnShowInfo();   
  12.    }} 

將上面的類庫生成IMsg.dll,新建一個類庫MYPlugin1,添加剛出的引用,分別新建兩個類來實現IMsg中定義的接口。

  1. using System;  
  2. using System.Collections.Generic;using System.Text;using IMsg;  
  3. namespace MYPlugin1{      
  4. public class myConsole : IMsgPlug     
  5.  {         
  6.  #region IMsgPlug 成員         
  7.  public  void OnShowDlg()       
  8.    {           
  9.    Console.WriteLine("控制臺調用插件的OnShowDlg方法");       
  10.    }      
  11.     public  string OnShowInfo()      
  12.     {            return "myConsole";      
  13.     }        #endregion    
  14.   }}  
  15. using System;  
  16. using System.Collections.Generic;  
  17. using System.Text;  
  18. using System.Windows.Forms;  
  19. using IMsg;namespace MYPlugin1{   
  20. public  class MYDlg:Form,IMsgPlug     
  21.  {        #region IMsgPlug 成員   
  22.        public  void OnShowDlg()     
  23.      {           
  24.  this.Text = "插件子窗體";          
  25.   this.ShowDialog();  
  26. //調用Form的ShowDialog,顯示窗體        }       
  27.    public  string OnShowInfo()    
  28.       {            return "MyDlg";       
  29.    }        #endregion    
  30.   }} 

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

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Collections;
using System.IO;
using System.Reflection;
namespace MsgBoxMain
{
public partial class FormMain : Form
{

/// <summary>
/// 存放插件的集合
/// </summary>
private ArrayList plugins = new ArrayList();
public FormMain()
{
InitializeComponent();
}

/// <summary>
/// 載入所有插件
/// </summary>
private void LoadAllPlugs()
{
//獲取插件目錄(plugins)下所有文件
string[] files = Directory.GetFiles(Application.StartupPath + @"\plugsins");
foreach (string file in files)
{
if (file.ToUpper().EndsWith(".DLL"))
{
try
{
//載入dll
Assembly ab = Assembly.LoadFrom(file);
Type[] types
= ab.GetTypes();
foreach (Type t in types)
{
//如果某些類實現了預定義的IMsg.IMsgPlug接口,則認為該類適配與主程序(是主程序的插件)
if (t.GetInterface("IMsgPlug")!=null)
{
plugins.Add(ab.CreateInstance(t.FullName));
listBox1.Items.Add(t.FullName);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}

}



private void btnLoadPlug_Click(object sender, EventArgs e)
{
LoadAllPlugs();
}

//調用插件的方法
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();

}
}
}

 

運行結果:

這里與網上那位原創的仁兄的看法不同(原文鏈接http://blog.csdn.net/jam12315/archive/2008/08/18/2791534.aspx),可供大家討論。

原文有這樣的一段:

if (itemStr == "myConsole")
{ //調用存儲在動態數組plugins里面的插件對象的OnShowInfo方法
string msgInfo = ((IMsgPlug)plugins[ListItems.SelectedIndex]).OnShowInfo();
MessageBox.Show(msgInfo, "MYPlugin1", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if (itemStr == "MYDlg")//調用存儲在動態數組plugins里面的插件對象的OnShowDlg方法
{
((IMsgPlug)plugins[ListItems.SelectedIndex]).OnShowDlg();
}

我認為既然是插件,就應該是動態加載的,客戶端肯定不能判斷 itemStr,因為實現接口的類是不可預料的,因此主程序不應該添加對IMsg的引用,也不應該在客戶端實例化插件對象,因為插件開發的初衷是為了以后更新的時候不更改主程序,只提供對應的dll 下載,就可以直接使用了,以前的接口都定義好了,新的實現類也就是不可預料的,因此不能在主程序實例化實現接口的類,這樣違背了插件的初衷。

原文鏈接:http://www.cnblogs.com/sndnnlfhvk/archive/2011/06/02/2067713.html

【編輯推薦】

  1. C#簡單游戲外掛制作(以Warcraft Ⅲ為例)
  2. C#控件的閃爍問題解決方法總結
  3. 淺析C#延遲加載的運行機制和應用場景
  4. C#多線程中lock的用法
  5. 用C#實現HTTP協議下的多線程文件傳輸
責任編輯:彭凡 來源: 博客園
相關推薦

2009-09-02 15:34:37

C#實現插件構架

2009-08-24 15:50:23

C# 泛型C# 泛型委托

2009-08-24 09:55:24

C#集成開發環境

2009-08-14 11:00:16

C#創建Windows

2009-08-28 16:03:15

C#程序實現鼠標移動

2009-08-27 14:29:28

顯式實現接口

2009-09-07 14:00:57

C#抓取網頁

2009-09-07 14:52:01

C# HTTP Req

2009-08-17 18:34:50

C# ChangeCo

2009-08-14 17:45:52

C# ArrayLis

2009-08-07 17:25:37

C# SortedLi

2009-09-11 10:41:20

C# WinForm控

2009-08-25 17:59:49

C#入門

2009-08-24 16:02:10

C# Windows應

2009-08-14 14:25:09

Windows服務程序

2009-08-25 09:39:21

創建C# Window

2009-09-02 17:28:26

C#程序設計Windows窗體

2009-08-21 15:06:27

C#網絡聊天程序

2009-08-14 16:41:22

C#啟動Windows

2009-09-03 13:48:46

C#調用記事本記事本程序
點贊
收藏

51CTO技術棧公眾號

先锋资源久久| 久久精品无码中文字幕| 三上悠亚在线一区| 亚洲精品无码久久久久| 国产91精品入| 自拍偷拍欧美激情| 国产精品久久久久久久久| 久久久久亚洲av无码专区喷水| 男女视频免费看| 99国产精品久久一区二区三区| 国产精品拍天天在线| 欧美一区二区视频97| 国产精品亚洲一区二区无码| www久久日com| 成人vr资源| 色噜噜夜夜夜综合网| 好吊色欧美一区二区三区四区| 九九视频免费看| 欧美经典影片视频网站| 亚洲色图一区二区三区| 国产有码在线一区二区视频| 一级黄色毛毛片| 99久久伊人| 国产精品免费人成网站| 国产欧美一区二区三区另类精品| 欧美人妻精品一区二区免费看| 免费国产自久久久久三四区久久| 欧美性猛交xxxx富婆| 蜜桃麻豆91| 99久久久久久久久| 国产成人精品999在线观看| 欧美性猛交xxxx久久久| 国产免费xxx| 国产在线电影| 久久精品二区亚洲w码| www.久久久久久.com| 91福利免费观看| 综合 欧美 亚洲日本| 日韩视频中文字幕在线观看| 在线日韩影院| 国产日韩欧美综合一区| 国产美女直播视频一区| 欧美性生交大片| 成人在线啊v| 亚洲精品免费在线| 国产精品久久久久久久久久久久冷| 精品无码黑人又粗又大又长| 精品少妇一区| 成人在线观看免费| 国产熟女一区二区三区四区| 日韩欧美自拍| 日韩一二三区不卡| av在线观看地址| 影院在线观看全集免费观看| 成人三级在线视频| 果冻天美麻豆一区二区国产| youjizz国产精品| 欧美xxxx18国产| 荫蒂被男人添免费视频| 国产又爽又黄的视频| 日韩制服诱惑| 亚洲欧美福利一区二区| 国产精品swag| 草莓视频18免费观看| 国产在线精品一区二区三区| 蜜桃欧美视频| 国产日韩一级片| 韩国午夜理伦三级不卡影院| 色噜噜狠狠色综合网图区| 亚洲一二三av| 99久久999| 精品久久久久久久中文字幕| 亚洲一一在线| 囯产精品久久久久久| 视频一区视频二区中文| 九九久久综合网站| 谁有免费的黄色网址| 亚洲成人影音| 欧美性videosxxxxx| 日本免费a视频| 8888四色奇米在线观看| 成人av片在线观看| 成人有码视频在线播放| 久久夜色精品国产噜噜亚洲av| 欧美亚洲三区| 午夜精品一区二区三区av| 香蕉成人在线视频| 亚洲精品国产首次亮相| 97色在线视频观看| 日批视频免费观看| 国产丶欧美丶日本不卡视频| 国产精品一区二区三区毛片淫片| 国产精品无码久久久久成人app| 久久精品一区二区国产| 91精品国产沙发| 全网免费在线播放视频入口| 在线亚洲自拍| 久久久久久久一区二区| 动漫性做爰视频| 亚洲经典在线| 色在人av网站天堂精品| 在线观看亚洲欧美| 免费成人在线网站| 国产精品精品视频| 国产三级午夜理伦三级| 91丝袜国产在线播放| av资源站久久亚洲| 99热这里只有精品99| 另类小说综合欧美亚洲| 国产精品成人一区二区三区 | 曰本三级在线| 欧美亚洲日本一区| 在线观看成人动漫| 国产精品视频一区视频二区| 亚洲二区中文字幕| 一级黄色片毛片| 欧美色就是色| 国模视频一区二区三区| 久久av高潮av无码av喷吹| 久久九九99| 国产精品视频一区二区三区经| 9i精品一二三区| 精品久久久视频| 肉丝美足丝袜一区二区三区四| 日韩视频一二区| 中文国产亚洲喷潮| 中国1级黄色片| 在线一区欧美| 国产精品区一区| 国产精品久久久久久福利| 日韩理论在线观看| 人妻熟妇乱又伦精品视频| 小视频免费在线观看| 欧美日韩精品二区| 好男人www社区| 中文字幕日本一区| 在线观看久久av| 日本天堂中文字幕| 国产亚洲精品v| 国产精品久久久久av免费| 天天操天天操天天| 国产欧美一区二区精品性色| 在线精品日韩| h片在线观看| 欧美亚洲国产bt| 波多野结衣福利| 五月天综合网站| 91黄色8090| 后入内射欧美99二区视频| 亚洲码国产岛国毛片在线| 亚洲网中文字幕| 久久国产精品色av免费看| 欧美成人精品一区| 国产视频aaa| 一区二区三区四区在线免费观看| 香蕉视频xxxx| 欧美美乳视频| 热re91久久精品国99热蜜臀| 国产日韩欧美视频在线观看| 国产精品的网站| 91成人在线观看喷潮教学| 韩日精品一区| 日韩在线观看免费高清| 一级黄色大片免费| 国产一区二区三区四区五区入口| 国模精品一区二区三区| 九色porny丨首页入口在线| 欧美三级电影精品| 中文字幕 日本| 在线看片日韩| 91人人爽人人爽人人精88v| 日本免费一区二区三区最新| 亚洲免费观看在线视频| 一区二区三区人妻| 日韩a一区二区| 国产精品爽黄69天堂a| 成年人黄视频在线观看| 精品国产精品一区二区夜夜嗨| 国产成人免费观看网站| 精品无码三级在线观看视频| 国产 欧美 日韩 一区| 欧美美女啪啪| 欧美另类高清videos| 老牛影视av牛牛影视av| 色欧美片视频在线观看 | 欧美激情在线免费| 国产欧美日韩中文| 黄色羞羞视频在线观看| 欧美日韩视频一区二区| 99精品久久久久| 91偷拍与自偷拍精品| www.亚洲高清| 亚洲国产高清一区| 亚洲欧美日产图| 成人线上视频| 日韩有码在线播放| 神马一区二区三区| 欧美日韩国产在线观看| www.日本高清视频| 成人一区在线观看| 无码少妇一区二区三区芒果| 激情欧美国产欧美| 亚洲mv在线看| 日韩一区二区三区免费| 亚洲激情自拍图| 日韩免费观看一区二区| 国产精品午夜在线| 91香蕉视频污版| 欧美亚洲国产激情| 国产伦精品一区二区三区四区视频 | 成人自拍在线| 国产精品亚洲аv天堂网| 麻豆成全视频免费观看在线看| 欧美成人激情图片网| 国产区在线视频| 丰满岳妇乱一区二区三区| 亚洲精品在线91| 色综合电影网| 中文字幕一区图| 欧美人在线观看| 波多野结衣在线网站| 国产99一区视频免费| 国产精品日韩一区二区三区 | 性欧美疯狂xxxxbbbb| 一区二区三区视频免费在线观看| 国产成人生活片| 国产高清中文字幕在线| 欧美精品一区二区三区蜜桃 | 99亚洲视频| 日本男女交配视频| 99久久久久久久| 亚洲一区二区三区日本久久九| 欧美久久久精品| 97电影在线| 亚洲色图35p| 久久免费视频6| 亚洲欧洲另类国产综合| 亚洲一级黄色录像| 国产视频一区不卡| 一区二区伦理片| 久久日一线二线三线suv| 天天操天天爱天天爽| 国产精品免费看| 黄色国产一级视频| 红桃视频国产一区| 免费观看成人在线| 亲子伦视频一区二区三区| 国产精品久久亚洲7777| 黄色欧美在线| 国产麻豆日韩| 日韩高清一级| 国产精品一区二区性色av| 欧美片第一页| 久久中文字幕一区| 天天色棕合合合合合合合| 精品久久久久久久久久久久包黑料 | 中文字幕亚洲欧美日韩高清| а√天堂中文在线资源bt在线| 亚洲人成在线播放| www.91在线| 久久精品国产电影| 污视频在线免费| 欧美老肥妇做.爰bbww| 久久免费视频精品| 亚洲国产视频一区| 日本xxx在线播放| 91免费视频观看| 亚洲精品成人无码| 国产精品乱人伦一区二区| 91香蕉一区二区三区在线观看| 99久久婷婷国产| 91成人破解版| 成人激情视频网站| 亚洲综合网在线观看| 中文字幕av一区二区三区高| 亚洲一二三在线观看| 久久久久久久国产精品影院| 麻豆tv在线观看| 91在线观看免费视频| 性生交大片免费看l| 豆国产96在线|亚洲| 大黑人交xxx极品hd| 成人性色生活片免费看爆迷你毛片| 久久久久国产免费| 久久精品亚洲麻豆av一区二区| 亚洲精品电影院| 亚洲一级电影视频| 国产真人无遮挡作爱免费视频| 亚洲777理论| 中国a一片一级一片| 欧美刺激脚交jootjob| 一级特黄aaa| 91精品国产高清一区二区三区 | 一区二区三区伦理| 欧美一级淫片aaaaaaa视频| 四虎精品一区二区免费| 日韩免费视频在线观看| 黄色aa久久| 国产精品中文字幕在线| 嗯用力啊快一点好舒服小柔久久| 欧美激情国产日韩| 日韩最新在线| 在线观看福利一区| 国产精品毛片| 久久久久久无码精品人妻一区二区| 2021国产精品久久精品| 人妻少妇精品一区二区三区| 色婷婷av久久久久久久| 亚洲精品成av人片天堂无码| 欧美成人猛片aaaaaaa| 激情在线视频| 国内揄拍国内精品| 成人永久在线| 亚洲精品一区二区三区蜜桃久| 一区二区福利| 天天躁日日躁狠狠躁av| 国产精品九色蝌蚪自拍| 色av性av丰满av| 亚洲精品在线免费播放| 成码无人av片在线观看网站| 国产精品揄拍一区二区| 国产伦精品一区二区三区视频| 九一国产精品视频| 成人一区二区在线观看| 性色av无码久久一区二区三区| 欧美午夜片在线观看| 日本午夜在线视频| 97视频在线观看播放| 国产精品白丝一区二区三区| 欧美xxxx吸乳| 精久久久久久久久久久| 欧美性生交大片| 欧美日韩成人综合天天影院| 韩国三级在线观看久| 日本欧美在线视频| 亚洲动漫精品| 性欧美videosex高清少妇| 久久精品网址| 久久午夜福利电影| 亚洲三级免费电影| 亚洲香蕉在线视频| 深夜福利一区二区| 超薄肉色丝袜脚交一区二区| 久久精品一二三区| 天天做天天爱天天综合网2021 | 全部毛片永久免费看| 亚洲精品一区二区三区精华液 | 亚洲国产一区二区三区青草影视| www精品国产| 日韩精品视频中文在线观看| 成人亚洲性情网站www在线观看| 青青a在线精品免费观看| 亚洲精品无吗| 丰满少妇在线观看| 中文字幕在线不卡一区二区三区 | 精品久久久久久亚洲综合网 | 你懂的视频在线观看| 久久九九国产精品怡红院 | 国模精品视频| 欧美黑人3p| 日本不卡123| 日本国产在线视频| 亚洲国产成人av网| 亚洲 精品 综合 精品 自拍| 人人爽久久涩噜噜噜网站| 精品国产一区二区三区香蕉沈先生 | 亚洲国产va精品久久久不卡综合| 婷婷色在线视频| 国产97色在线| 亚洲男女av一区二区| 欧美激情视频免费观看| 成人国产在线看| 国产一级av毛片| 欧美精美视频| 亚洲香蕉成人av网站在线观看| www在线观看免费| 狠狠色伊人亚洲综合成人| 精品人妻伦九区久久aaa片| 日韩网站在线看片你懂的| 国产高清自产拍av在线| 五月婷婷综合色| 国产成人综合在线| www五月天com| 九九精品视频在线| 国产免费av一区二区三区| 亚洲精品在线网址| 欧美日韩激情视频8区| 午夜在线视频| 琪琪亚洲精品午夜在线| 99精品美女| 日韩 中文字幕| 91精品国产综合久久婷婷香蕉| 精品视频三区| 91香蕉亚洲精品| 99精品视频网| 亚洲人与黑人屁股眼交| 日韩精品亚洲元码| 国产精品一区三区在线观看| 亚洲欧洲日产国码无码久久99| bt欧美亚洲午夜电影天堂|