写点什么

Managed Extensibility Framework:它是什么,前景如何

  • 2011-10-17
  • 本文字数:1193 字

    阅读完需:约 4 分钟

顾名思义,Managed Extensibility Framework 是一个用来扩展.NET 应用程序的框架。最近 Channel 9 采访了 Oleg Lvovitch 和 Kevin Ransom ,谈到 MEF 的历史以及第二版的计划。

MEF 非常不幸地成为.NET 里最常被误用的库。开发者经常把它用作一个通用的依赖注入框架或者控制反转容器,这些角色都不适合它。甚至有人更进一步地把它用作“new”运算符的替代品。微软的 Glenn Block 解释了 Managed Extensibility Framework 的真正用意:

我们不希望把 MEF 看作通用 IoC。最好把 MEF 的 IoC 方面看作一个实现细节。我们使用 IoC 模式是因为它很好地解决了我们面临的问题。

MEF 的关注点是扩展性。当你考虑 MEF 时,把它看作推进我们的平台发展的一项投资。我们将来的产品和平台将会把 MEF 用作添加扩展性的标准机制。第三方产品和框架也将利用相同的机制。MEF 的普通“用户”会创建 MEF 可以使用的组件,但不会在他们的应用程序里直接使用 MEF。

想象一下,当你想扩展我们的平台时,你在 bin 文件夹里放一个 dll,你的事情已经完成了。启用 MEF 的应用程序会识别并利用新的扩展。这才是 MEF 的愿景。

到目前为止,MEF 的历史上最重要的应用程序是 Visual Studio 10。许多特性都是为了满足 Visual Studio 里的编辑器的需求,比如说,延迟加载所有东西和细粒度协定。随着托管代码慢慢地取代基于 COM 的扩展模型,在 Visual Studio 里使用 MEF 的情况在 Visual Studio 11 里会逐渐增加。

MEF 2.0 不会是一个革命性的版本。大多数特性都是为了解决 Visual Studio 组和广大社区反馈的问题。一个重要的改变是简化了编程模型。虽然适合像 Visual Studio 的复杂应用程序,但承载 API 对于只有少数几个扩展点的小型应用程序来说有点复杂。这项工作仍然在进行中,目前没有细节可以提供。

另一方面,MEF 正在尝试更好地支持容器的层级结构。每个容器都可以把它自己的上下文添加到从父容器继承过来的上下文。举个例子,Visual Studio Shell 可以看作一个容器。里面包含了每个项目的容器,对应的上下文包含了项目类型和项目文件等信息。第三层容器可能是单个文件的编辑器。MEF 1 已经可以处理这种情况,不过做法有点笨拙。

MEF 1 的一个主要问题是无法诊断组合问题。没有 MEF 的源代码和巧妙设置的断点,要确定具体的原因可能非常困难。MEF 2 在这方面已经投入大量资源,确保这将不再是问题。

.NET 4.5 的一个新特性是自定义反射上下文。你可以根据常规C#代码的表达规则在运行时通过反射上下文向一个类添加特性声明。MEF 2 里的 RegistrationBuilder 会接受这些自定义特性,把它们当作本来就有那样处理。这允许在 MEF 里使用 POCO 类型,即使你无法访问这些类型的源代码。

MEF 也将适用于 Windows 8 Metro 应用程序,但形式上会有很大不同。大多数高级功能都被移除,只关注 MEF 的主要用途,暴露扩展点和加载扩展。

查看英文原文: Managed Extensibility Framework: What It is and Where It is Going

2011-10-17 18:123369

评论

发布
暂无评论
发现更多内容

博睿数据2021战略发布巡展,开辟IT运维创新路径

博睿数据

博睿数据 数据链DNA 服务可达

中国呼叫中心与卓越客服产业峰会,百度智能客服再提行业创新

百度大脑

解决方案 行业创新

MySQL事务处理特性的实现原理

华为云开发者联盟

MySQL 数据库 innodb 事务 隔离

量化网格策略交易软件,马丁倍投策略机器人

服务可达,达者为先,产品发布会嘉宾精彩观点分享!

博睿数据

博睿数据 数据链DNA 服务可达

1小时内被全网疯转 29.8w 次,最终被所有大V协力封杀!

Java架构师迁哥

🍃【SpringCloud基础使用】Nacos与Gateway实现动态路由

码界西柚

nacos SpringCloud Gateway 5月日更 自定义配置

高可用DevHa实践,告诉你生产环境0性能故障是如何做到的!

TakinTalks稳定性社区

压测 性能调优 全链路压测 系统稳定高可用 性能压测

webRTC的标准与发展

anyRTC开发者

音视频 WebRTC RTC

appium 入门参考

37手游iOS技术运营团队

ios 测试 自动化测试 iOS Developer

现在已经卷到需要问三色标记了吗?

艾小仙

获得业内一致好评!华山版Java性能优化全栈手册“登场”

Java架构追梦

Java 阿里巴巴 架构 性能优化 华山版

40K成功入职:六年开发终获小米Offer(附面经+面试题+答案详解)

Java架构师迁哥

眼观六路耳听八方还不知疲倦?数仓智能运维服务体系是怎么做到的?

华为云开发者联盟

数据库 数据仓库 监控 智能运维 数据库监控

【玩转PDF】贼稳,产品要做一个三方合同签署,我方了!

牧小农

JVM

2021 全球技术领导力峰会 融云布道技术领导力进阶之路

融云 RongCloud

工业4.0加速实现“数物相合”,可视化工厂节省时效高达85%

一只数据鲸鱼

人工智能 数据可视化 工业互联网 智慧工厂 智能生产

答应我,别再学Swing框架了好吗?

北游学Java

Java spring swing

编曲新手可以用什么编曲软件?

奈奈的杂社

编曲 编曲宿主 编曲软件

低代码实现传统装饰企业的管理跃迁

华为云开发者联盟

低代码 华为云 计算 低代码开发 AppCube

从源码角度研究Java动态代理

叫我阿柒啊

动态代理 代理模式 rmi

我厂与张家港市达成全面战略合作,共推数据中心和城市智能化转型

百度大脑

数据中心 城市智能化

Bugless 异常监控系统 (iOS端)

37手游iOS技术运营团队

ios iOS Developer 崩溃分析 bugless

从零开始学习ThingJS之创建App对象

ThingJS数字孪生引擎

可视化 3D可视化 数字孪生

5 月 28 日 - 29 日阿里云峰会视频云专场直播预告

阿里云CloudImagine

阿里云 音视频

并发王者课-青铜7:顺藤摸瓜-如何从synchronized中的锁认识Monitor

MetaThoughts

Java 多线程 并发

鸿蒙轻内核M核源码分析:数据结构之任务排序链表

华为云开发者联盟

鸿蒙 数据结构 任务排序链表 双向链表数组 鸿蒙轻内核

活动预告 _ 即构×火山引擎:泛娱乐社交音视频技术实践沙龙

ZEGO即构

用Python在树莓派上播放音乐

IT蜗壳-Tango

5月日更

走向机器智能时代:移动机器人的困局与创新

晨山资本

机器人 移动机器人 AMR

用图数据库可视化探索 Chia Network 区块链数据

古思为

区块链 可视化 图数据库

Managed Extensibility Framework:它是什么,前景如何_.NET_Jonathan Allen_InfoQ精选文章