程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> (3)MEF插件系統中通信機制的設計和實現,mef插件

(3)MEF插件系統中通信機制的設計和實現,mef插件

編輯:C#入門知識

(3)MEF插件系統中通信機制的設計和實現,mef插件


1.背景

一般的WinForm中通過C#自帶的Event機制便能很好的實現事件的注冊和分發,但是,在插件系統中卻不能這麼簡單的直接用已有的類來完成。一個插件本不包含另外一個插件,它們均是獨立解耦的,實現插件和插件間的通信還需要我們設計出一個事件引擎來完成這個需求。

目前很多高級語言中基本都實現了觀察者模式,並進行了自己的包裝。比如C#中的delegate和event組合,java awt中的Event和addActionListener組合,Flex中的Event、addEventListener、dispatchEvent等。

不過這裡如果要實現插件系統的事件機制,需要重新自己利用觀察者模式來進行設計。而且還將涉及到泛型這個概念。

2.知識准備

2.1觀察者模式

這裡先給出觀察者模式的UML圖:

 

可以把觀察者模式理解為兩個部分:

(1)Obesrver(觀察者):每個觀察者均有自己的行為方式,但是他們均繼承於同一個基類,此基類中定義了一個所有繼承觀察者均有的行為觸發方法。

(2)Subject(觸發者):觸發者即是被觀察者,在Subject中一定會有一個容器來存儲與觸發者相關的觀察者,因為包含觀察者容器,所以Subject方法中提供了注冊和注銷的方法。同時Subject中一定有一個觸發方法,當調用此方法時,便會遍歷裝有觀察者的容器,Obeserver類再利用多態特性實現了每個觀察者特有的行為。

2.2. 泛型

泛型是具有占位符(類型參數)的類、結構、接口和方法,這些占位符是類、結構、接口和方法所存儲或使用的一個或多個類型的占位符。

事件機制中的通信數據因為不能確定為某種具體數據,在實現中,統一用泛型來代替。

3.以一個需求為線索

項目中需要在插件處理完影像後,將處理完的影像的地址、名稱以及類型通知給宿主。然後宿主根據得到的消息和數據,將處理完後的影像展現出來。

4.設計完整的可導出的觸發者(Subject)部分

這部分設計的UML圖如下所示:

 

4.1設計單個觸發者(Subject)

 

代碼中實現了觀察者容器、注入和發布部分。

4.2 設計要傳遞的內容(data)

我的項目中需要將插件處理完影像後,將處理完的影像的地址、名稱以及類型通知給宿主。於是我將這樣設計我的事件中包含的數據:

 

4.3 設計觸發者子類(ConcreteSubject)

具體的要傳遞的數據是對應具體的觸發者的。我們可以有多種多樣的事件,而每種觸發者將對應一種事件,所以這裡需要設計多個觸發者子類。針對3.1.2中說的插件處理完影像後的觸發事件,這裡給出實現的代碼:

 

4.4 設計MEF中的契約(Contract)

 

4.5 設計觸發者容器(EventAggregator)

 

觸發者容器中包含了所有的觸發者,並且提供了獲取容器中具體觸發者的方法,即GetEvent方法。代碼中還給出了Export標簽,這是為了讓其他插件和組件加載後能夠將觸發者容器注入其中。這樣需要將某個方法注入到一個具體的事件上時,則只需在觸發者容器中通過GetEvent方法得到該觸發者,然後將方法再subscribe到這個觸發者中。

4.6整體結構

 

5. 設計完整的可注入的觀察者(Observer)部分

5.1將觸發者容器(EventAggregator)注入

 

5.2 將Observer注冊到對應的觸發者(Subject)中

首先獲得需要注冊入的ConcreteSubject,然後將Observer注入其中,這裡的Observer是繼承於Action的。

 

6.設計事件觸發(invoke)部分

6.1將觸發者容器(EventAggregator)注入

這裡同樣需要將EventAggregator注入到事件被觸發的模塊中。

 

6.2 觸發機制的實現

 

首先獲得需要觸發的觸發者(ConcreteSubject),然後將需要傳遞的信息實例化,最後觸發這個事件(Publish)。

7.總結

到這裡,我已經把我的MEF插件系統中的事件機制解析完了。其實說到底就是一個觀察者模式的實現,只是在這個模式的基礎上做了一個包裝。在下一節中,我將主要講解MEF插件中插件注入到宿主中的過程,和插件在宿主中界面的實現。


通信線路設計 CAD畫圖有沒有 像室分設計的 天越 插件什的?

不太了解你的領域,以前用過CAD
一、自動標注距離 每款都有這個功能 二、桿路拉線 聽不懂 三、數據間動態公式應該沒有,至少現在沒有發現,可以試試在EXCEL裡建立一個表格,每算一組,填寫一組CAD圖畫,如果不復雜的話
 

找一篇題目為《教學業務管理信息系統設計》論文?

一、建設目標
  建成一個完整統一、技術先進、高效穩定、安全可靠的基於Internet/Intranet的教學管理信息系統。這是一個集教務工作自動化和信息化為一體的先進的電腦網絡系統,在為教務工作有關部門提供優質、高效的業務管理和事務處理的同時,采用安全可靠的現代化處理和控制技術,及時、准確、可靠地采集和傳輸信息,建立完備、可靠的教學信息處理系統。對各院(系)教務辦實現統一的信息浏覽、成績管理。與財務處學生收費系統、學生處學生管理系統、就業辦公室的學生就業管理系統等實現學生基本信息的共享。通過校園網為教務處網站訪問者提供全面及時的信息和數據,如課程設置、學生的信息查詢、網上選課、校外單位的學歷證書、成績單核實等。
  系統的安全性、穩定性、可靠性非常重要,在教務處內部各科室(包括各個校區)組成一個虛擬網,教學事務處理在虛擬網中進行,並借助防火牆與校園網隔離,抵御來自外部網絡的惡意攻擊;建成的系統應能避免因軟、硬件故障造成的數據損失;保證數據在傳輸過程中安全、保密;系統有足夠大的吞吐量,不會因過多的服務請求而出現系統崩潰;能一天24小時,一年365天提供服務;界面友好,易於學習,非計算機專業人員經過短時間培訓即可掌握基本操作。
  借助於教學管理信息系統的建設,促進教學管理人員素質的提高,通過教學管理人員的實際應用,促進我校的教學管理水平和效率的提高;通過提供多層次的教務信息服務和先進實用的使用手段,滿足校內外對教務信息共享和利用的要求,並為各級領導提供有效的輔助決策服務。二、系統建設原則  本系統作為學校管理信息系統的一個資源子網進行建設,將以校園網為基礎,實現信息資源共享。同時為校信息系統的建設建立初始框架。2.1 統籌考慮,信息共享  本應用系統基於校園網,實現高水平的信息資源共享和跨平台的信息資源訪問,不僅要面向全校不同部門的信息資源的共享,還要解決各部門已有的或將建立的信息系統的資源共享,而各部門信息系統和資源子系統的系統平台不一,數據庫又不盡相同,要解決不同的資源子網的信息共享,提高信息資源共享的利用率,系統結構應具有跨平台訪問不同數據源的機制。建立與其他系統的數據接口,教務系統可以為其他系統如人事系統、科研系統提供數據共享。  2.2 包容性和可擴展性  系統應具有較好的可擴展性和包容性。系統的可擴展性應包括能接納已有的系統和在今後系統軟硬件擴展時,能有效地保護已有的投資。特別是在應用需求變化時(應用與系統的需求往往提不全或者經常會變化),有一個較好的應用平台,能容易地加以調整。系統易於擴充升級,既能滿足當前業務的需求,又為今後的擴充留有空間。  2.3 規范化教務信息管理  教務信息全校用統一的數據格式描述,將教學計劃等教務業務工作標准化、規范化。以國家教委公布的《高等學校管理基本信息集》(教信息[1992]1號)(教信息[1994]1號)為基本信息標准。采用信息標准的優先次序是:國家標准,教育部標准,教育部下屬機構標准,國家其他部頒標准,上海市教委標准,上海市地方標准,上海交大標准。  2.4 系統簡潔,易使用、易維護、適用非計算機人員使用  應用系統的設計符合日常辦公運作的需求,功能完備實用,簡單易學,界面友好清晰,易於擴充。  網絡結構簡單明了,層次清楚,便於管理,易於擴充。  2.5 為教師、學生提供良好的信息服務  在教務信息標准化、規范化的基礎上,對信息進行合理的布局,在提供優質、高效的業務管理和事務處理的同時,使全校師生可以在任一平台上對本專業教學計劃進行查詢,了解課程設置情況,查詢成績、網上選課等,教師可以查......余下全文>>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved