精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人在线激情网| 成人免费av在线| 中文一区一区三区高中清不卡| 日韩中文在线观看| 久久久久久久有限公司| 免费在线观看黄色小视频| freexxx性亚洲精品| 国产精品88久久久久久| 狠狠躁夜夜躁人人爽天天天天97 | 亚洲综合图片一区| 精品极品在线| 福利一区二区在线| 俺去亚洲欧洲欧美日韩| 欧美日韩大尺度| 天天射天天操天天干| 欧美高清不卡| 欧美日韩黄色一区二区| 色之综合天天综合色天天棕色 | 黑人极品videos精品欧美裸| 一区二区视频国产| jizz国产在线| 欧美男gay| 天天综合网 天天综合色| 97久久天天综合色天天综合色hd | 香蕉av在线播放| 伊人久久大香线蕉av超碰演员| 欧美精品乱码久久久久久按摩 | 51精品国产人成在线观看| 国产精品视频一区在线观看| 老司机成人在线| 亚洲一区免费观看| 国产精品国模大尺度私拍| 久久久久久免费观看| 日韩精品久久久久久久软件91 | av大片免费观看| 欧美人与牛zoz0性行为| 精品免费日韩av| 男人插女人视频在线观看| www.四虎在线观看| 伊人影院久久| 蜜月aⅴ免费一区二区三区| 亚洲热在线视频| av影视在线看| 一区二区三区91| 精品国产乱码一区二区三区四区| 91蜜桃视频在线观看| 亚洲va久久久噜噜噜久久| 欧洲亚洲国产日韩| 美国av在线播放| 人人妻人人澡人人爽人人欧美一区| 激情五月***国产精品| 日韩中文字幕在线视频| 久久久精品成人| 日韩精品一区二区三区中文 | 免费毛片在线不卡| 日韩电视剧在线观看免费网站| 熟女少妇在线视频播放| 国产主播福利在线| 麻豆精品在线播放| 欧美大片在线看| 国产吞精囗交久久久| av成人免费看| 亚洲综合免费观看高清完整版| 麻豆中文字幕在线观看| 国产原创精品视频| 97国产一区二区| 国产精品视频网站| 九九热只有精品| 国内黄色精品| 日韩三级精品电影久久久| www黄色av| 一区二区三区伦理| 国产亚洲精品aa| av电影成人| 少妇又紧又色又爽又刺激视频| 欧美影院一区| 欧美精品激情视频| 欧美色图17p| 少妇久久久久| 亚洲国产视频二区| 91在线国产福利| 精品国产一区二区三| 九色网友自拍视频手机在线| 国产女同性恋一区二区| 国产伦精品一区二区三区高清| 内射后入在线观看一区| 久久久午夜电影| av蓝导航精品导航| 天天爽夜夜爽夜夜爽| 久久精品欧美一区二区三区不卡| 一区二区日本| 国产高清免费av在线| 99久久婷婷国产综合精品 | 国产亚洲精品久久久久久久| 日韩精品系列| 国产成人久久精品77777最新版本| 奇门遁甲1982国语版免费观看高清| 午夜免费激情视频| 婷婷另类小说| 国内外成人免费激情在线视频| 裸体武打性艳史| 国产精品x453.com| 国内精久久久久久久久久人| 亚洲av综合一区| 国产不卡在线一区| 日本高清一区| 色av男人的天堂免费在线| 中文天堂在线一区| 国产精品999视频| gogo久久| 精品1区2区3区| 一路向西2在线观看| 免费观看亚洲| 亚洲免费三区一区二区| 亚洲人一区二区| 操人在线观看| 欧美一区国产二区| 下面一进一出好爽视频| 成人在线分类| 日韩无一区二区| 日本精品在线观看视频| 成人高清av| 色偷偷av一区二区三区| 男人日女人网站| 久久精品人人| 国产精品久久久久久久久免费| www.亚洲黄色| 国产精品国产三级国产专播品爱网| 亚洲人一区二区| 欧美成人资源| 日韩久久免费视频| 一区二区三区伦理片| 欧美系列电影免费观看| 69av在线播放| www.五月婷婷.com| 99国产麻豆精品| 免费特级黄色片| 色尼玛亚洲综合影院| 亚洲福利视频网| 亚洲黄色小说视频| 国产精品一区毛片| 国产噜噜噜噜噜久久久久久久久 | 亚洲国产日韩一区| 国产成人无码一区二区在线观看| 欧美人与牛zoz0性行为| 2019中文字幕在线| 亚洲网站免费观看| 国产a视频精品免费观看| 国产精品无码乱伦| 成人国产精品一区二区网站| xxxx性欧美| 国产精品久久久久精| 国产福利一区二区三区视频| 99精品视频网站| 另类视频一区二区三区| 日韩av在线天堂网| 日韩字幕在线观看| 久久人人97超碰com| 国产精品美女在线播放| 日韩国产大片| 亚洲а∨天堂久久精品9966| 亚洲天堂岛国片| 免费成人av资源网| 国产精品推荐精品| 国产乱码精品一区二三赶尸艳谈| 精品国产一二三区| 影音先锋亚洲天堂| 国产肉丝袜一区二区| 四季av一区二区三区| 全国精品免费看| 久久中国妇女中文字幕| 免费黄色网址在线| 国产午夜亚洲精品午夜鲁丝片| 午夜免费精品视频| 91精品国产调教在线观看| 国产91在线高潮白浆在线观看| 亚洲va天堂va欧美ⅴa在线| 国产蜜臀av在线一区二区三区| 成人亚洲精品777777大片| 亚洲成av人电影| 国产成人免费电影| 黄色av电影在线播放| 欧美一级国产精品| 久久久久久久久久久久久久av| 久久久美女艺术照精彩视频福利播放| 国产一区二区在线免费播放| 欧美1区2区| 欧美精品一区二区三区在线看午夜| 99热国产在线| 亚洲黄色有码视频| 曰批又黄又爽免费视频| 一区二区三区欧美久久| 爱豆国产剧免费观看大全剧苏畅| 在线观看欧美理论a影院| 国产精品亚洲第一区| 国产精品蜜臀| 日韩精品资源二区在线| 欧美a级片免费看| 成人国产精品免费观看| 黄色片免费在线观看视频| 三级小说欧洲区亚洲区| 91精品久久久久久| 91社区在线观看播放| 日本乱人伦一区| www.色天使| 国产一区不卡在线| 中文字幕日韩精品久久| 国产精品chinese在线观看| 久久久免费精品视频| 欧美日韩在线中文字幕| 色欧美日韩亚洲| avove在线播放| 国产欧美一区二区三区网站| wwwxxx色| 精品一区二区在线观看| a级网站在线观看| 久久99成人| 国产精品成人在线| 香蕉视频在线播放| 欧美蜜桃一区二区三区| 黄色av一级片| 亚洲va欧美va人人爽午夜| 亚洲精品无码一区二区| 影音先锋久久| 久久久久亚洲av无码专区喷水| 蜜桃成人av| 精品无人乱码一区二区三区的优势| 国产一区二区在线观| 国产欧美精品va在线观看| 国产免费不卡| 51久久精品夜色国产麻豆| 国产美女情趣调教h一区二区| 另类美女黄大片| 91激情在线| 中文字幕精品www乱入免费视频| 亚洲天堂一二三| 欧美在线免费视屏| 日韩在线 中文字幕| 欧美日韩黄色大片| 亚洲国产精品午夜在线观看| 久久综合久久鬼色| 中文字幕亚洲日本| 国产高清不卡二三区| 日批视频在线看| 国产91对白在线观看九色| 九色91porny| 国产精品一区二区三区四区| 婷婷无套内射影院| 狠色狠色综合久久| 日韩三级电影网站| 中文无码日韩欧| 99re6热在线精品视频播放速度| 国产人与zoxxxx另类91| 亚洲999一在线观看www| 日本在线影院| www.亚洲免费视频| 久草免费在线观看| 欧美成年人视频| 影音先锋男人在线资源| 欧美极品少妇xxxxⅹ免费视频| 欧洲成人综合网| 最近2019中文字幕mv免费看| 自拍视频在线网| 久久视频免费在线播放| 丝袜中文在线| 一本大道久久加勒比香蕉| 国产高潮在线观看| 色88888久久久久久影院按摩| 中国一级片黄色一级片黄| 亚洲国产视频网站| 5566中文字幕| 一区二区视频在线看| 日韩精品一区二区在线播放| 欧美性生活大片免费观看网址| 欧美日韩在线国产| 午夜精品一区在线观看| 亚洲天堂男人av| 91精品国产日韩91久久久久久| 免费的黄色av| 亚洲视频欧洲视频| 女人18毛片一区二区三区| 日韩电视剧在线观看免费网站| porn亚洲| 亚洲欧美第一页| 亚洲精品综合久久| 亚洲精品自拍第一页| 粉嫩av一区| 欧美大片在线看| av久久网站| 都市激情久久久久久久久久久| 欧美爱爱网站| 中文字幕乱码一区二区三区| 亚洲毛片av| 男女激情无遮挡| 久国产精品韩国三级视频| 亚洲少妇18p| zzijzzij亚洲日本少妇熟睡| 无码人妻精品一区二区中文| 亚洲美女偷拍久久| 久久久久在线视频| 欧美精品一区二区三区蜜桃| 成人免费高清在线播放| 久久久久久久一区二区三区| 欧美v亚洲v综合v国产v仙踪林| 国产精品久久久久久久久久99| 日韩激情精品| 在线观看成人av电影| 国产精品日本| 免费黄视频在线观看| 国产v综合v亚洲欧| 超碰人人干人人| 欧美日韩国产中文字幕| 午夜精品一区二区三| 综合网日日天干夜夜久久| 高潮在线视频| 92国产精品久久久久首页 | 成人免费看片98欧美| 7777精品伊人久久久大香线蕉的 | 日本网站在线观看一区二区三区| 欧美精品99久久| 国产高清精品网站| 久久国产波多野结衣| 一区二区视频在线| 亚洲一区二区影视| 亚洲午夜av电影| 欧美性videos| 欧美高清在线视频观看不卡| 欧美成人高清视频在线观看| 日韩成人av电影在线| 先锋影音久久| 国内外成人免费在线视频| 国产精品18久久久久久久久久久久| 国产精品国产三级国产专业不| 婷婷激情综合网| 二区三区在线视频| 国产视频精品在线| 3344国产永久在线观看视频| 99久久综合狠狠综合久久止 | 欧美五码在线| www..com日韩| jiyouzz国产精品久久| 精品一区二区三区四| 欧美成人国产一区二区| 日韩专区av| 91九色在线观看| 国产综合亚洲精品一区二| 91丨porny丨九色| 亚洲综合av网| 国产91绿帽单男绿奴| 欧美激情中文字幕在线| 福利片在线一区二区| 国产一区二区三区小说| 不卡高清视频专区| 在线观看 中文字幕| 亚洲欧美日韩一区二区在线 | 亚洲国产一区二区三区a毛片| 日本一级大毛片a一| 香蕉影视欧美成人| 先锋av资源站| 国产97免费视| 91精品一区二区三区综合| 亚洲第一天堂久久| 亚洲精品成人悠悠色影视| 韩国av免费在线| 欧美又大又硬又粗bbbbb| 国产成人1区| 亚洲图色中文字幕| 亚洲综合丝袜美腿| 亚洲 欧美 精品| 国产成人精品一区二区三区| 亚洲综合网站| 免费无码不卡视频在线观看| 国产网红主播福利一区二区| 国产孕妇孕交大片孕| 欧美多人乱p欧美4p久久| 秋霞综合在线视频| 精品999在线| 一区二区欧美在线观看| 日韩精品视频在线观看一区二区三区| 国产精品美女无圣光视频| 欧美一区二区三区久久精品| 少妇被狂c下部羞羞漫画| 欧美综合视频在线观看| 午夜伦理在线视频| 麻豆91av| 亚洲欧美bt| 中文字幕求饶的少妇| 337p日本欧洲亚洲大胆色噜噜| 亚洲日本网址| 欧美中日韩一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 男女免费视频网站| 亚洲天堂免费视频| 久久视频社区| 欧美激情成人网| 亚洲天堂成人在线观看| 国产乱叫456在线| 91成品人片a无限观看| 婷婷激情图片久久| 中文字幕在线看高清电影|