MEF技術

MEF 是一個使開發人員可以建立「插件式應用程序」的技術,這裏的「插件」是指在應用程序部署後開發人員可以經過開發「插件」來擴展應用程序功能。但不一樣之處是使用MEF框架您在系統設計階段不須要考慮在應用程序部署後可能會有什麼插件,MEF能夠自動搜索這些插件。這也是爲何會叫他Managed Extensibility Framework。json

一個簡單的MEF示例,數據結構

假設系統中有以下需求
支付功能: 用戶能夠選擇多種支付方式進行支付如支付寶,網銀在線,財付通等等。 框架

1. 定義支付接口及支付請求數據結構函數

2. 定義插件接口及插件元數據(用於標識插件信息).net

3. 添加獲取支付插件方法, 修改支付函數使支付支持多種支付方式插件

4.使用MEF實現支付接口debug

5. 編寫第一個支付插件設計

6. 使用MEF容器註冊插件xml

7. 目前系統中可用的插件只有「支付寶支付插件」,若是咱們想添加一個新的網銀在線插件blog

8. 插件元數據的定義:

9. 使用插件/刷新插件

  1. 拷貝須要的插件程序集至 ./bin/debug/plugins。(如Plugin.Payments.Echinabank.dll或 Plugin.Payments.Alipay.dll)MEF會自動加載plugins文件夾中的插件程序集。
  2. 刷新插件,拷貝新插件程序集至 ./bin/debug/plugins調用directoryCatalog.Refresh()函數. MEF會從新加載plugins文件夾中的插件程序集。

總結,MEF仍是挺適合作.net程序的插件框架,使用MEF作插件主要有下面幾個好處:

  1. 從.Net 4.0 開始微軟已經把MEF內置在.Net Framework中,使用時只須要引用System.ComponentModel.Composition便可。
  2. 開源。
  3. 輕量級,不像Castle 或者 Spring之類的IoC使用起來比較複雜。
  4. 很容易實現動態搜索插件。
  5. 元數據功能使得插件有自描述能力不須要使用xml或者json來描述插件

相關資源

MEF 主頁, MSDN 文檔, MSDN 雜誌 MEF vs IoC, .NET 4.0 MEF FAQ (Socket, Plug and extension) 

相關文章
相關標籤/搜索