mef 的精髓在於外掛程式式開發,方便擴充套件。
我學東西,習慣性的先搞的最簡單的demo出來,看看有沒有好玩的東東,然後繼續深入。這個博文,不談大道理,看demo說事兒。
至於概念,請google ,大把大把的。
例如,應用程式的日誌輸出到文字,後來想改為輸出到資料庫,按照傳統的辦法,需要替換專案,刪除原有的引用,增加新的引用;如果使用mef,直接用新的dll替換原來的dll,即可搞定,這就是mef的魅力。
下面就用簡單的例子來實現上述的需求。
1. 建立乙個解決方案,然後增加如下的幾個專案
dblog 輸出日誌到資料庫的實現
textlog 輸出日誌到文字的實現
ilog 輸出日誌的介面,呼叫方和實現者的中間橋梁
mefconsolehost 控制台應用程式,模擬實用場合
mefwpfhost wpf 應用程式,模擬實用場合
2. 先定義介面ilog,非常簡單,就乙個方法
3. 輸出到文字的實現textlog
首先新增引用:引用剛才新增的介面ilog 和system.componentmodel.composition
然後增加類textlogservice.cs,繼承介面,並實現方法。
注意 類和方法都public。
最後定義匯出[export(typeof(ilog.ilogservice))]
這個是最主要的,和普通的類庫區別也在這裡
4. 輸出到資料庫的實現dblog,實現方法同上例,輸出日誌的時候區分一下。
5. 呼叫方mefconsolehost, 這個也需要增加兩個引用,
ilog 和system.componentmodel.composition
主程式**如下:
class program注意兩個地方static
void main(string args)
void run()
}
a. 匯入宣告
[import(typeof(ilogservice))]用介面來定義例項,然後增加匯入宣告,和匯出的相互對應public ilogservice currentlogservice
b. 建立catalog和container
textlog.dll
");var container = new compositioncontainer(catalog);
container.composeparts(this);
先這麼寫,隨後再深入挖掘。
6. 把所有專案的輸出都指定到同乙個目錄,也就說讓dll和exe在同一目錄,執行控制台程式,輸出
textlog: mef log test pass
7.如果我們要輸出到資料庫,把上面的catalog那一句改成
如果不想這麼麻煩,這個目錄裡面只放dblog.dll 或者textlog.dll ,然後把上面那句改為:
照樣可以用。
如果兩個都在,還這麼搞,那不行的,因為就定義了乙個例項,同目錄有兩個dll。
好了,入門的demo就到這裡。
可以延伸開來,觸類旁通,繼續深入研究其他概念,例如其他的catalog\export等。
乙個簡單的入門級Python爬蟲
乙個簡易爬蟲,主要功能是爬取全國各地空氣質素資料,輸出到乙個csv檔案,後續加入相關資料處理得出實時空氣質素排名前10和後10的城市及其空氣質素 aqi 使用的是beautifulsoup庫,具體用法參照 import requests from bs4 import beautifulsoup i...
入門級學習ES6的記錄
1.關於let const let與var的區別 let是塊級作用域,var是函式作用域 let不允許重複申明 const用來定義常量,一旦定義不能改變 2.變數的結構賦值 解構賦值遵循模式匹配原則,比如 var k,l 1,4 console.log g 還可以定義初始值 var a 4 cons...
怎樣進行大資料的入門級學習
學習大資料的話,可以給你乙個大綱,入門可以參考。推薦乙個大資料學習群 119599574每天晚上20 10都有一節 免費的 大資料直播課程,專注大資料分析方法,大資料程式設計,大資料倉儲,大資料案例,人工智慧,資料探勘都是純乾貨分享,一般的學習方法如下 1 linux命令基礎實戰 大資料架構體系結構...