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) 

相关文章
相关标签/搜索