外掛程式式程式開發及其應用(C#)

來源:互聯網
上載者:User

http://blog.csdn.net/penua/archive/2006/06/26/837255.aspx

起因:欲開發一報表系統,能動態載入報表程式

該系統基於外掛程式式架構,即除了登入程式和主程式外,其它所有功能均通過後期載入的方式調用,每個組件實現一個特定的報表(或其它功能)        
基本思路:        
1)登入程式        
 判斷使用者身份,並根據參數判斷能否進入系統,驗證通過後返回所有使用者資料(許可權、基本資料)       
 參數:子系統代碼       
 許可權資訊:可用功能列表       
 基本資料:個人資訊、科室資訊       
2)主畫面        
 擷取上述資訊並存於全域對象中       
 主畫面可以實現準系統,如修改密碼、日誌查詢等       
 主畫面實現外掛程式載入功能,並把使用者資訊傳入組件       
 主畫面在載入外掛程式之前需進行有效性驗證,即判斷使用者權限、判斷各個介面方法是否有效       
 主畫面實現外掛程式間通訊功能,允許各個組件通過把資料共用       
3)外掛程式        
 提供有效性驗證功能,提供許可權要求       
 能擷取主畫面傳入的使用者資訊,並存入特定對象中       
 外掛程式間通訊功能       
        
        
一、動態載入控制項         
動態載入,最基本用到的就是反射機制。在System.Reflection的namespace下有一系列的關於擷取Assembly資訊、類(型)資訊的類、介面、結構等:         
        
//載入控制項         
Assembly assembly = Assembly.LoadFrom(@"C:\Controls.dll");         
//獲得類(型)         
Type type = assembly.GetType("Controls.UserControl",false,true);         
//設定篩選標誌         
BindingFlags bflags = BindingFlags.DeclaredOnly | BindingFlags.Public         
| BindingFlags.NonPublic | BindingFlags.Instance;         
//調用建構函式並獲得對象         
Object obj = type.InvokeMember("UserControl", bflags |         
BindingFlags.CreateInstance, null, null, null);         
//將對象轉換類型         
System.Windows.Forms.Control c = (Control)obj;         
//將控制項添加到表單         
this.Controls.Add(c);         
        
下面對上面程式段用到的一些變數、方法做一點說明         
1、BindingFlags,枚舉類型         
BindingFlags.Instance : 對象執行個體         
BindingFlags.Static : 靜態成員         
BindingFlags.Public : 指可在搜尋中包含公用成員         
BindingFlags.NonPublic : 指可在搜尋中包含非公用成員(即私人成員和受保護的成員)         
BindingFlags.FlattenHierarchy : 指可包含階層上的靜態成員         
BindingFlags.IgnoreCase : 表示忽略 name 的大小寫         
BindingFlags.DeclaredOnly : 僅搜尋 Type 上聲明的成員,而不搜尋被簡單繼承的成員         
BindingFlags.CreateInstance : 表示調用建構函式。忽略 name。對其他調用標誌無效         
        
2、Type.InvokeMember         
public object InvokeMember(         
string name,         
BindingFlags invokeAttr,         
Binder binder,         
object target,         
object[] args         
);         
參數         
name         
  String,它包含要調用的建構函式、方法、屬性或欄位成員的名稱。Null 字元串 (""),表示調用預設成員。         
invokeAttr         
  一個位屏蔽,由一個或多個指定搜尋執行方式的 BindingFlags 組成。 訪問可以是 BindingFlags 之一,如Public、 NonPublic、Private、 InvokeMethod 和         
  GetField 等。不需要指定尋找類型。如果省略尋找類型, 則將應用 BindingFlags.Public | BindingFlags.Instance。         
binder         
  一個 Binder 對象,該對象定義一組屬性並啟用綁定,而綁定可能涉及選擇重載方法、 強制參數類型和通過反射調用成 員。 若為空白引用,則使用 DefaultBinder。         
target         
  要在其上調用指定成員的 Object。         
args         
  包含傳遞給要調用的成員的參數的數組。         
傳回值         
  表示被調用成員的傳回值的 Object。   

二、外掛程式架構 

      

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.