MEF 學習之一 入門級的簡單Demo

2022-02-07 12:02:55 字數 1741 閱讀 8778

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命令基礎實戰 大資料架構體系結構...