Managed Extensibility Framework(MEF)是微软的一个用来扩展.NET应用程序的框架,它最初为了满足Visual Studio里的编辑器的需求,比如说,延迟加载所有东西和细粒度协定。随着托管代码慢慢地取代基于COM的扩展模型,MEF框架也逐渐成型。

MEF是在Codeplex上开源的,并且现在已经是.Net 4.0的一部分。我们可以用它非常容易的实现插件框架。一个简单的示例如下(使用时需要添加System.ComponentModel.Composition.dll 的引用):

    class Program
{
[Import]
ILogger logger; void Compose()
{
var catalog = new AssemblyCatalog(this.GetType().Assembly);
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
} public static void Main(string[] args)
{
var p = new Program();
p.Compose(); p.logger.LogMessage("hello world");
}
} interface ILogger
{
void LogMessage(string msg);
} [Export(typeof(ILogger))]
class ConsoleLogger : ILogger
{ public void LogMessage(string msg)
{
Console.WriteLine(DateTime.Now + ": " + msg);
}
}

这个例子比较简单,并不能很好的体现MEF带来的便利,MS官方的一个稍微复杂点的例子SimpleCalculator更合适一些。

不过,从这个例子中也可以看出MEF的基本工作方式:服务方通过ExportAttribute导出可提供的服务,使用者通过ImportAttirbute导入所需要的服务。它们之间彼此隔离而独立,服务对象的创建由MEF框架完成,并能提供单例、延迟加载等特性,而无须我们显式编码实现。

CodeProject上也有几篇不错的入门教程:

  1. An Introduction to Managed Extensibility Framework

MSDN电子杂志上也有一篇介绍得非常详细的文章:Building Composable Apps in .NET 4 with the Managed Extensibility Framework

由于篇幅所限,对于MEF这里并不做更多的介绍,如果想更深入的了解它的话,可以参看MSDN官方文档:Managed Extensibility Framework,其Codeplex的主页上的文档也值得一看。另外,园子里也有一系列文章写的非常不错的:《MEF程序设计指南》博文汇总

最新文章

  1. python ldap
  2. js-this的用法,来自阮一峰老师的文章
  3. IIS关于“ 配置错误 不能在此路径中使用此配置节”的解决办法
  4. 用css控制cellspacing、cellpadding
  5. c#正则表达式采集数据
  6. js实现页面图片加载进度条
  7. C指针--通过二级指针往回拉数据
  8. 迷你MVVM框架 avalonjs 0.85发布
  9. koa-router中路由/后面不填参数就会报404的解决办法
  10. 详解java设计模式之责任链模式
  11. 使用 Prometheus + Grafana 对 Kubernetes 进行性能监控的实践
  12. 阅读MDN文档之CSS选择器介绍(一)
  13. 2017.9.16~17,热烈庆祝共创力罗老师《敏捷MINI体验式实战培训》在某大型企业成功举办!
  14. 不能够连接到主机(名称为localhost)上的MySQL服务”
  15. debian下erlang新版本安装
  16. JavaScript快速入门-ECMAScript语句
  17. bzoj千题计划227:bzoj1486: [HNOI2009]最小圈
  18. .NET MVC请求流程
  19. 数据离散化 ( 以及 stl 中的 unique( ) 的用法 )+ bzoj3289:Mato的文件管理
  20. Activity和Fragment的生命周期

热门文章

  1. mybatis 控制台打印sql脚本
  2. SLF4J multiple
  3. 【轨迹动画css】不规则轨迹动画css教程,弹球,客服广告悬浮层都可以用
  4. java 多线程总结篇1之——基本概念
  5. 2016-2017-2 20155309南皓芯《java程序设计》第十周学习总结
  6. pycharm、webstorm和idea激活码
  7. 为GHOST远控添加ROOTKIT功能
  8. 怎么区分MSSQL中nvarchar和varchar的区别?
  9. 程序设计实习MOOC / 程序设计与算法(三)第一周测验
  10. Linux 的软件安装目录