托管扩展性框架是什么?
托管扩展性框架(Managed Extensibility Framework,简称MEF),是.NET的一个新的类库,旨在促成应用和组件更大的重用。通过使用MEF,.NET应用将能从是静态编译的而变成可动态组合的。如果你正在建造可扩展的应用,可扩展的框架和应用扩展,那么MEF就可为你所用。
MEF实际上是个组合框架(composition framework),而且定位客户是“大的应用”极其大的应用,其中第一个客户大概就是Visual Studio本身。MEF提供的这些功能,
---不用装载程序集即可查询元数据
---可以静态地核实所有组件的依赖图和拒绝那些会造成系统处于不合法状态的组件
---契约适配器
---提供一套发现机制,用于定位和装载扩展
---允许附件元数据的标记设置,用于辅助查询和过滤
MEF 有几个基本核心概念:
可组合的部件(或简称“部件”)— 一个部件向其他部件提供服务,并使用其他部件提供的服务。MEF 中的部件可来自任何位置(应用程序内部或外部);从 MEF 的角度来看,这并无区别。
导出 — 导出是部件提供的服务。某个部件提供一个导出时,称为该部件导出 该服务。例如,部件可以导出记录程序(对于 Visual Studio 而言则是导出编辑器扩展)。虽然大多数部件只提供一个导出,但也有部件可提供多个导出。
导入 — 导入是部件使用的服务。某个部件使用一个导入时,称为该部件导入 该服务。部件可导入一个服务(如记录程序),也可导入多个服务(如编辑器扩展)。
约定 — 约定是导出或导入的标识符。导出程序指定其提供的字符串约定,导入程序指定其需要的约定。MEF 从要导出和导入的类型派生约定名称,因此在大多数情况下,您不必考虑这一点。
组合 — 部件由 MEF 组合,MEF 将部件实例化,然后使导出程序与导入程序相匹配。
编程模型 — MEF 的外观
开发人员可通过编程模型使用 MEF。通过编程模型,可将组件声明为 MEF 部件。MEF 提供了一个现成可用的特性化编程模型。该模型只是 MEF 支持的众多可能的编程模型之一。MEF 的核心 API 完全与特性无关。