MEF学习笔记--初步了解

MEF (Managed Extensibility Framework)

由于应用需求的变化频繁,导致应用软件可扩展性越做越差,很难加入新的功能.在NET4.0中,加入了MEF(托管可扩展框架)就为了解决了简化可扩展应用程序和组件的设计这个问题.

注意:

1.创建一个MEF Application时需要引用System.ComponentModel.Composition。

2.Compose()方法用于绑定对象到对应的接口。

3.MEF支持通过程序集或目录(DirectoryCatalog)或两者结合等方式绑定可扩展的对象。

4. 如果在新建CompositionContainer容器时,使用了DirectoryCatalog,则在该目标路径下的所有程序集都会被遍历查询,用于寻找实现Import接口的具体class。

 当然,请在标记Export时使用[Export(typeof(接口))]来精确定位。

 另外,通常使用时,我们需要使用一些特定的元数据(metadata)来进一步描述或说明某些特定接口(如果安全性,速度等)。我们可以使用PartMetadata标记class,使用ExportMetadata标记实现方法。 

 

相关的关键概念:

•              Composition(复合)是将几个带有不同功能的对象组合为一个或多个复杂对象的过程。复合不是从父类中继承功能,而是将几个不同的对象组合为一个对象。例如,Wing、Propeller、Fuselage 和 VerticalStablizer 对象可以组成 Aircraft 对象的一部分。

•              ComposableParts 是 MEF 的关键构建块。ComposableParts 支持应用程序通过 Exports 和 Imports 公开和使用组件扩展。

•              Contracts 是 Export 和 Import 组件之间的通信途径。Contract 通常通过 Interface 类实现。Contracts 支持 MEF ComposableParts 以避免依赖关系或者与其他组件之间的紧密耦合。

•              Conditional Binding 允许加载满足特定元数据标准的组件。您可以选择加载 VerticalStabilizer  组件,这些组件仅由复合石墨 (composite graphite) 组成。

实现扩展的主要方式是,在应用程序的扩展点添加 Import 属性并向扩展添加相应的 Export 属性。Import 和 Export 可以看做是供应商和消费者的关系:Export 组件提供了一些价值;Import 组件消费这些价值。其他扩展选项对于开发人员是开放的,包括完全自定义的扩展方法。

本人推荐学习地址:http://www.cnblogs.com/Terrylee/archive/2008/09/01/uisng-managed-extensibility-framework-overview.html

 

posted @ 2010-06-28 21:45  一个人在北京  阅读(1073)  评论(0编辑  收藏  举报