第N次,CLR拥有了第一个插件模型

2009 年 7 月 22 日

在 MEF 所有功能已经完成之际,我们对.NET Framework 迷雾般的扩展性框架进行了考察。MEF(托管扩展框架)实际上是微软发布的第四个扩展性框架,虽然微软声称这是第一个。

MEF 是微软官方为.NET Framework 打造的依赖注入框架,微软在文档中声称:

MEF 为运行时扩展提供了简便的解决方案。在今天,任何希望支持插件系统的应用程序,都需要从头打造自己的一套基础设施。这些插件系统通常是和应用程序绑定的,无法被其它应用程序使用。

然而这并非事实。除了像 Spring.NET 这样的第三方框架,微软自己至少还开发了其它三个.NET 运行时扩展框架。

那么到底应该使用哪一个呢? Glenn Block 写道:

System.Addin 可以解决版本依赖、隔离和故障恢复

  • 使用 System.Addin,可以让不同的组件运行在各自的域中,这样同一个插件的不同版本可以同时运行,并与它们所引用的程序集运行在同一个进程中。
  • 使用 System.Addin,可以让不同版本的插件互相隔离,这样你可以同时运行同一插件的不同版本。
  • System.Addin 会自动卸载那些不再使用的域,以回收内存
  • System.Addin 有很多安全方面的功能(插件运行在沙箱之中)来保证组件不能访问未经授权的数据。
  • 当插件崩溃时,System.Addin 可以让你优雅的从故障中恢复(这得益于插件的隔离)

另一方面,MEF 可以解决插件搜索与组合

  • MEF 可以组合组件中的深层次对象结构
  • MEF 将组件从静态依赖中解放出来
  • MEF 可以延迟加载和延迟初始化组件
  • MEF 为组件提供了目录机制和丰富的元数据,使得组件可以被动态搜索到
  • MEF 可以将拥有不同编程模型的组件组合在一起,而不仅仅是静态类型

虽然构建在 Add-In 模型之上可以在安全隔离与稳定性上得到不少好处,然而 MEF 并不构建在 Add-In 模型之上,而是从头开始编写的,并没有考虑到已有的技术。

这两种技术的微妙关系显示,在微软内部存在着不同的声音。一方面我们可以看到如《使用MEF 创建可扩展程序》这样的视频,程序经理Gleen Block 甚至在11 月声称“MEF 代表了可扩展框架的趋势”。

而另一方面,我们可以从Krzysztof Cwalina 在2008 年7 月的演示中清楚的看到, MEF 正与 Add-In 模型结合在一起使用,而且程序经理 Nicholas Blumhardt 说过,.NET 4 发布后会考虑这两个项目之间的互操作

一个可能的原因是,Add-In 模型对于大多数人来说并不好用。它过于复杂,而且所需的代码生成工具如 System.Addin Pipeline Builder 才刚刚开始开发。需要注意的是,这已经是此工具的第二春了,因为原来的项目没有人维护,也没有人修bug。

那么System.AddIn 的最终命运会是什么?如无意外,它将会像LINQ to SQL 一样静静的消失。

查看英文原文: For the Nth Time, the CLR Has Its First Plugin Model

2009 年 7 月 22 日 07:321725
用户头像

发布了 63 篇内容, 共 20.2 次阅读, 收获喜欢 1 次。

关注

评论

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

第四周作业

典型的大型互联网应用系统使用了哪些技术方案和手段之个人见解和总结

潜默闻雨

第四周作业

大雄

week4 学习总结

任小龙

【第四周】架构师训练营总结

星星

MySQL 实战 45 讲笔记(3)- 高可用

王传义

MySQL

聊聊视频会议的昨天、今天和明天

拍乐云Pano

音视频 WebRTC 音视频会议 云服务 RTC

架构师训练营第四周心得

路人

极客大学架构师训练营

第四周作业

刘卓

Spring源码梳理(一)之ClassPathXmlApplicationContext

彭阿三

Java spring

架构师训练营作业 -- Week 4

吴炳华

极客大学架构师训练营

Week 04 总结

鱼_XueTr

互联网架构的演进

架构师培训 -04 系统架构

刘敏

大型互联网应用系统技术方案

张磊

第四周总结

大雄

第四周作业

重新来过

第四周作业

秦宝齐

课程作业

架构师训练营第四周 - 作业

Eric

极客大学架构师训练营

架构师第四周作业

路人

极客大学架构师训练营

Week04-总结

张磊

week4作业二

任鑫

架构

架构师训练营第四周总结

王鑫龙

极客大学架构师训练营

浅谈大型网站技术应用及适用场景

Jerry Tse

架构 网站架构 极客大学架构师训练营 作业

第四周学习总结

刘卓

【第四周】架构师训练营作业

星星

记一次系统优化经历-php系统

而立

性能调优 swoole

经济学家朱嘉明:2020年是区块链与产业结合的重要年份

CECBC区块链专委会

CECBC 区块链技术 应用落地 产业结合

聊聊架构演化

Jerry Tse

架构 极客大学架构师训练营 作业

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?

任小龙

雅典娜交易所打造财富共同体,掀起币圈追捧热潮

Geek_116789

第四周学习总结

第N次,CLR拥有了第一个插件模型-InfoQ