[zhuan]《MEF程序设计指南》博文汇总

http://www.cnblogs.com/beniao/archive/2010/08/11/1797537.html

在MEF之前,人们已经提出了许多依赖注入框架来解决应用的扩展性问题,比如OSGI 实现以Spring 等等。在 Microsoft 的平台上,.NET Framework 自身内部包含组件模型和 System.Addin。同时存在若干种开源解决方案,包括 SharpDevelop 的 SODA 体系结构和“控制反转”容器(如 Castle Windsor、Structure Map、Spring.Net 以及Unity)。

  虽然.NET平台下,包括MS在内的各种方案已经遍地开花,但是MEF是第一个随着CLR发布的解决方案。

  官方说法: Managed Extensibility
Framework(MEF)是.NET平台下的一个扩展性管理框架,它是一系列特性的集合,包括依赖注入(DI)以及Duck
Typing等。MEF为开发人员提供了一个工具,让我们可以轻松的对应用程序进行扩展并且对已有的代码产生最小的影响,开发人员在开发过程中根据功能要
求定义一些扩展点,之后扩展人员就可以使用这些扩展点与应用程序交互;同时MEF让应用程序与扩展程序之间不产生直接的依赖,这样也允许在多个具有同样的
扩展需求之间共享扩展程序。

  了一个月左右的休息时间将官方提供的MEF程序设计指南(The MEF Programming Guide)以及自己使用中的一些经验进行了整理,为了方便大家阅读特将此系列博文进行汇总,详细如下博文列表。


  MEF程序设计指南一:在应用程序中宿主MEF

  本篇通过一个简单的应用实例介绍了如何在应用程序中宿主MEF,以及最基本的导入、导出和部件组合的应用。

  MEF程序设计指南二:Silverlight中使用CompositionInitializer宿主MEF

  本篇介绍了如何在Silverlight中使用CompositionInitializer宿主MEF,并通过不同的导入导出配置,演示了MEF的动态装载配件组合和一些简单的应用案例。

  MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用

  本篇介绍了如何定义组合部件(Composable
Parts)和契约(Contracts),以及基于契约的的多重组件部件的相关应用,包括接口的多实现,如何使用
ImportManyAttribute特性通过契约获取接口的多重实现实例等。最后还介绍了通过契约进行约束,实现装配指定契约的部件。

  MEF程序设计指南四:使用MEF声明导出(Exports)与导入(Imports)

  本篇介绍了如何使用MEF声明导出(Exports)与导入(Imports),包括类、字段、属性以及方法级别的部件导出、导出的应用。

  MEF程序设计指南五:迟延(Lazy)加载导出部件(Export Part)与元数据(Metadata)

  本篇介绍了MEF中的迟延加载(Lazy)机制和元数据(Metadata)导出功能特性。

  MEF程序设计指南六:MEF中的目录服务(DeploymentCatalog)

  对于MEF的目录服务MEF分别为WPF和Silverlight提供了不同的目录机制。使用目录的主要功能就是方便实现程序部件的装载,以及动态的组合应用程序部件等功能,更可以非常方便的得到程序部件的程序集、导出部件等相关数据。

  MEF程序设计指南七:使用目录(Catalog)动态装载xap与目录筛选(Filtered Catalog)

  如果不使用MEF进行托管扩展处理,只有通过WebClient进行程序包的下载、解析。实际上MEF的动态下载的底层实现一样是使用的WebClient,然后利用AggregateCatalog进行动态组合。

  MEF程序设计指南八:部件生命周期(Parts Lifetime)托管

  MEF中的每一个可进行动态装配的导出部件都是具有生命周期的,在没有特别需求的情况下一般都没有对生命周期进行管理,而实际上MEF已为每一
个部件进行了默认的生命周期管理,MEF的生命周期分为三种:Any、Shared及NonShared,被定义在
System.ComponentModel.Composition.CreationPolicy枚举对象中。

  MEF程序设计指南九:重组(Recomposition)MEF部件

  通过前面八篇程序设计指南的学习,相信大家都知道应用程序部件的组合都是在初始化的时候进行装配的。如果当应用程序已经初始化完成了,此时又有
新的部件被导入且进行装配,按照目前的实现方式就无法实现了,我们需要一种可以进行动态装配、动态组合以及可以动态的进行新的部件被装配组合的通知的功
能,于此MEF所提供的重组(Recomposition)部件特性就可以派上用场了。

  MEF官方网站:http://mef.codeplex.com/

相关说明

本文属学习笔记文章,愿与有志者共同学习交流。欢迎转载,但请在明显地位标记本文的原文连接。

作      者:Beniao

文章出处:http://beniao.cnblogs.com/  或  http://www.cnblogs.com/

时间: 2024-12-11 10:12:18

[zhuan]《MEF程序设计指南》博文汇总的相关文章

【转】MEF程序设计指南四:使用MEF声明导出(Exports)与导入(Imports)

在MEF中,使用[System.ComponentModel.Composition.ExportAttribute]支持多种级别的导出部件配置,包括类.字段.属性以及方法级别的导出部件,通过查看ExportAttribute的源代码就知道ExportAttribute被定义为Attribute,并为其设置了使用范围. [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA18

【转】MEF程序设计指南五:迟延(Lazy)加载导出部件(Export Part)与元数据(Metadata)

MEF中使用导出与导入,实质上就是对一个对象的实例化的过程,通过MEF的特性降低了对象的直接依赖,从而让系统的设计达到一种高灵活.高扩展性的效果.在具体的设计开发中,存在着某些对象是不需要在系统运行或者的附属对象初始化的时候进行实例化的,仅仅只需要在需要使用到他的时候才会进行实例化,从系统的上来说这也是提高系统性能的一种可行的实现方式,这种方式就可以理解为对象的迟延初始化,或者叫迟延加载.MEF也对此使用场景提供了完善的实现机制,下面来看看在MEF中的迟延初始化是如何使用的. namespace

《高质量程序设计指南C/C++语言》笔记总结

在对林锐,韩永泉编著的<高质量程序设计指南C/C++语言>的学习中,我从中了解到了很多编程的小细节和重要的概念,特总结规整如下: 1.标准C语言允许任何非void类型的指针和void类型的指针之间进行直接的相互转换.但在C++中,可以把任何类型的指针直接指派给void类型指针,因为void*是一种通用指针:但是不能反过来将void类型指针直接指派给任何非void类型的指针,除非进行强制转换.因此在C语言环境中我们就可以先把一种具体类型的指针如int*转换为void*类型,然后再把void*类型

MEF 编程指南(十一):查询 CompositionContainer

CompositionContainer 公开了一部分获取导出.导出对象以及两者集合的重载. 在这些方法重载中,你应该遵循下面的共享行为准则 - 除非特别说明. 当请求单一实例的时候,如果没发现任何导入,将会抛出异常. 当请求单一实例的时候,如果发现不止一个导入,将会抛出异常. GetExportedValue 在下面的代码片段里,我们请求 Root(契约)实例的实例. var container = new CompositionContainer(new AssemblyCatalog(ty

MEF 编程指南(十):重组

有些应用程序被设计成在运行时动态地改变.例如,一个新的扩展可能被下载,或者其他原因变得不可用.MEF 依靠我们称之为重组(Composition)的技术处理,在初始化组合以后改变导入值的场景. 导入可以通过 [System.ComponentModel.Composition.ImportAttribute] 使用 Allowrecompostion 属性通知 MEF 支持重组.参考下面的代码: [Export] public class HttpServerHealthMonitor { [I

Powershell 译文连载和博文汇总

<SQL Server 2012 with PowerShell V3 Cookbook>译文连载 第一章 开始使用SQL Server和Powershell: 158. 介绍 160. 在你开始之前:使用SQL Server和Powershell工作 使用 PowerShell 管理 SQL Server 博文汇总 介绍和部署系列: 157. 在 Windows 7 和 Windows Server 2008 R2 上安装 Windows PowerShell 3.0 159. PowerS

Ember.js入门教程、博文汇总

第一章 对象模型 Ember.js 入门指南——类的定义.初始化.继承 Ember.js 入门指南——类的扩展(reopen) Ember.js 入门指南——计算属性(compute properties) Ember.js 入门指南——观察者(observer) Ember.js 入门指南——绑定(bingding) Ember.js 入门指南——枚举(enumerables) Ember.js 入门指南之七第一章对象模型小结 第二章 模板 Ember.js 入门指南——handlebars基

技术博文 汇总

本篇文章收集并整理各位在博客园中发表的精彩技术博文,希望为各位教职人员.学生和爱好者提供便利. 如果博文作者提出异议或意见,本人虚心接受并诚恳道歉. MS-UAP http://www.cnblogs.com/ms-uap/ 标题 链接 简介 “四核”驱动的“三维”导航 -- 淘宝新UI(需求分析篇) http://www.cnblogs.com/ms-uap/p/5306123.html UI, UWP, 需求分析 IT周见智 http://www.cnblogs.com/xiaozhi_56

MongoDB、Memcache、TC/TT、Redis等NOSQL博文汇总

MongoDB 系列: MongoDB介绍 MongoDB 2.4.10 安装和配置 MongoDB 实现currentOp定时捕获 MongoDB 使用副本集备份添加新的辅助副本成员 MongoDB日志切换(Rotate Log Files)方法及注意事项 MongoDB日志切换(Rotate Log Files)指南 MongoDB 日志切换(Rotate Log Files)实战 replSet error RS102 too stale to catch up Memcache 系列: