当前位置: 首页 > news >正文

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

  在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/

相关文章:

  • SQL INNER JOIN 关键字 用法
  • 几种经典算法回顾
  • SQL 读取不连续的数据,如读取第30到40之间数据
  • 工作中电子邮件的技巧
  • vector容器与iterator迭代器
  • Oracle Certification Program
  • python中if __name__ == '__main__'
  • 分布式设计与开发(二)------几种必须了解的分布式算法
  • 字符的全排列与组合问题总结
  • 与王建硕的对话:写Blog促进思考,喜爱Linux和PHP
  • Tomcat环境配置
  • linux网络编程之socket(十四):基于UDP协议的网络程序
  • 看穿面试这件事儿……Leo网上答疑42
  • SharePoint查看审计历史(View Audit History)报错:“File Not Found” 的解决办法
  • 再学J2SE的新收获——编程中的内存管理
  • 【知识碎片】第三方登录弹窗效果
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Golang-长连接-状态推送
  • HTTP那些事
  • JavaScript异步流程控制的前世今生
  • Java多态
  • magento 货币换算
  • Mysql数据库的条件查询语句
  • Node项目之评分系统(二)- 数据库设计
  • tensorflow学习笔记3——MNIST应用篇
  • vue的全局变量和全局拦截请求器
  • 包装类对象
  • 代理模式
  • 老板让我十分钟上手nx-admin
  • 软件开发学习的5大技巧,你知道吗?
  • 跳前端坑前,先看看这个!!
  • 王永庆:技术创新改变教育未来
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 我看到的前端
  • 译米田引理
  • 与 ConTeXt MkIV 官方文档的接驳
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 正则与JS中的正则
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (23)Linux的软硬连接
  • (31)对象的克隆
  • (42)STM32——LCD显示屏实验笔记
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (安卓)跳转应用市场APP详情页的方式
  • (力扣题库)跳跃游戏II(c++)
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (生成器)yield与(迭代器)generator
  • (算法设计与分析)第一章算法概述-习题
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)C#调用WebService 基础
  • (转)IOS中获取各种文件的目录路径的方法