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程序设计指南》博文汇总

.Net中的插件框架Managed Extensibility Framework的更多相关文章

  1. MEF(Managed Extensibility Framework) 微软平台插件化开发

    体验Managed Extensibility Framework精妙的设计   MEF(Managed Extensibility Framework)是.NET Framework 4.0一个重要 ...

  2. 在ASP.NET MVC应用中开发插件框架(中英对照)

    [原文] Developing a plugin framework in ASP.NET MVC with medium trust [译文] 在ASP.NET MVC应用中开发一个插件框架 I’v ...

  3. 体验Managed Extensibility Framework精妙的设计

    MEF(Managed Extensibility Framework)是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的扩展支持也是基 ...

  4. 使用Managed Extensibility Framework方便的扩展应用程序

    概述 Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,它是一系列特性的集合,包括依赖注入(DI)以及Duck Typing等.MEF为开发 ...

  5. MEF(Managed Extensibility Framework)有选择性地使用扩展组件

    在"MEF(Managed Extensibility Framework)使用全部扩展组件"中,客户端应用程序调用了所有的扩展组件,而且如果有新的扩展组件加入,必须先关闭程序,再 ...

  6. MEF(Managed Extensibility Framework)使用全部扩展组件

    MEF(Managed Extensibility Framework),所在命名空间是System.ComponentModel.Composition.dll.简单来说,MEF是将符合约定(一般是 ...

  7. MEF(Managed Extensibility Framework)依赖注入学习

    MSDN官方资料,并且微软还提供了SimpleCalculator sample学习样例 http://msdn.microsoft.com/en-us/library/dd460648(v=vs.1 ...

  8. MEF(Managed Extensibility Framework )的入门介绍

    1.什么是MEF MEF是一个来自于微软协作构建扩展应用的新框架,它的目的是在运行中的应用中添加插件.MEF继承于.NET 4.0 Framework平台,存在于各种应用平台的系统程序集中 2.程序集 ...

  9. (2)从实际项目谈起,基于MEF的插件框架之总体设计

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.MEF框架简介 MEF的全称是Managed Extensibil ...

随机推荐

  1. align="absmiddle" 的意义

    align=absmiddle表示图像的中间与同一行中最大元素的中间对齐 AbsBottom 图像的下边缘与同一行中最大元素的下边缘对齐. AbsMiddle   图像的中间与同一行中最大元素的中间对 ...

  2. [android]Intent跳转新的Activity可以传递数据过去

    两种方式: 一,直接通过Bundle对象来传递: 如果我们想要给“收件人”Activity说点什么的话,那么可以通过下面这封“E-mail”来将我们的消息传递出去 Intent intent=new ...

  3. wpf listBox的item,滚动条拖到低部,底部内容不能完全显示的问题

    listBox外部包裹一层 <ScrollViewer VerticalScrollBarVisibility="Auto"> 然后修改listBox的style,取消 ...

  4. Java 从多层嵌套中访问内部类的成员

    一个内部类被嵌套多少层并不重要--它能透明地访问所有它能嵌入的外围类的所有成员 //: innerclasses/MultiNestingAccess.java // Nested classes c ...

  5. CF1030A 【In Search of an Easy Problem】

    题目巨简单,主要是给大家翻译一下 给n个数,其中存在1就输出HARD,否则输出EASY,不区分大小写 #include<iostream> #include<cstdio> u ...

  6. springMVC源码分析--HttpMessageConverter数据转化(一)

    之前的博客我们已经介绍了很多springMVC相关的模块,接下来我们介绍一下springMVC在获取参数和返回结果值方面的处理.虽然在之前的博客老田已经分别介绍了参数处理器和返回值处理器: (1)sp ...

  7. Effective STL 笔记 -- Item 6 ~ 7: Container and Object Pointer

    Effective STL 笔记 – Item 6 ~ 7: Container and Object Pointer 中间两次笔记被删掉了,简单补一下: Item 3 中提到如果将对象直接放入容器中 ...

  8. java批量生成excel文件

    1.导入用于操作excel的jar,地址:https://pan.baidu.com/s/1qXADRlU 2.生成excel使用的模版文件,地址:https://pan.baidu.com/s/1c ...

  9. MEF实现设计上的“松耦合”(二)

    介绍了下MEF的基础用法,让我们对MEF有了一个抽象的认识.当然MEF的用法可能不限于此,比如MEF的目录服务.目录筛选.重组部件等高级应用在这里就不做过多讲解,因为博主觉得这些用法只有在某些特定的环 ...

  10. 在Kubernetes上使用Traefik

    本节内容: Traefik介绍 部署测试用的两个服务 Role Based Access Control configuration (Kubernetes 1.6+ only) 部署Traefik ...