惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
Webroot Blog
Webroot Blog
T
The Blog of Author Tim Ferriss
S
Schneier on Security
罗磊的独立博客
P
Privacy & Cybersecurity Law Blog
阮一峰的网络日志
阮一峰的网络日志
F
Fortinet All Blogs
P
Palo Alto Networks Blog
月光博客
月光博客
MongoDB | Blog
MongoDB | Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
量子位
NISL@THU
NISL@THU
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
Stack Overflow Blog
Stack Overflow Blog
Recorded Future
Recorded Future
K
Kaspersky official blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
Lohrmann on Cybersecurity
酷 壳 – CoolShell
酷 壳 – CoolShell
GbyAI
GbyAI
L
LINUX DO - 热门话题
Help Net Security
Help Net Security
B
Blog RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
I
InfoQ
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Cloudflare Blog
H
Heimdal Security Blog
Last Week in AI
Last Week in AI
美团技术团队
云风的 BLOG
云风的 BLOG
C
Check Point Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
V
Visual Studio Blog
G
GRAHAM CLULEY
AI
AI
Security Latest
Security Latest
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
Cyberwarzone
Cyberwarzone
Microsoft Security Blog
Microsoft Security Blog
P
Proofpoint News Feed

博客园 - 紫色阴影

Android ellipsize的小问题 腾讯招聘贴 有意向的人发邮件或者msn Asp.net MVC tips -- 也做为 要写漂亮的代码 (2) 要写漂亮的代码 (1) 在团队中如何推行一项新的实践 事件驱动的javascript 验收测试的自动化 项目中的技术风险 欢迎需求变动,拥抱变化 成为MVP 使用动态数据库访问对象 使用Spring.Net对Web页面进行依赖注入 如何把握设计的尺度 Bug驱动开发简介 Unity的属性注入 持续集成简介 简单介绍使用WCF的Web编程模型开发REST风格的Web Service 尝试使用WatiN进行TDD 关于站立式会议
初窥Managed Extensibility Framework
紫色阴影 · 2008-06-10 · via 博客园 - 紫色阴影

  Managed Extensibility Framework(简称MEF)是一些功能的集合,包括DI,Duck Typing等。这个框架产生的目的是微软想让Framework和Visio Studio等产品支持动态扩展,由命名就可以看出来。最近才出来CTP,在这里可以下载。

  MEF到底能够提供什么功能呢?如果是为了DI的话,P&P开发的Unity就足够了,framework小组也不需要开发自己的DI框架。网上的资料也不多,CTP下载包中包括MEF简单的介绍和它如何应用的示例。

下面以几段代码来介绍MEF如何使用。首先是DI:

image

  这里的Import是MEF中的Attribute,表明该Property是注入点,需要从外部注入。

image

  同样Export是MEF的一个Attribute,表明它是需要注入到某地方去的,注入的类型是ILogger。

image

  使用的时候要引入命名空间 using System.ComponentModel.Composition;

  现在的MEF好像不支持构造函数注入只支持属性注入,那么它的可用性就很差,因为很多时候和情况下是需要构造函数注入的。可能也和个人习惯有关系。但是很可能以后的版本会包括构造函数的注入。

  从此看来MEF似乎没有什么出彩的地方,它能做的别人(Unity, Spring.Net)都能做,甚至比它做的还要好。其实MEF的功能远远不止这些,再看下面这个例子:

image  

  MyJob类不变,而ILogger接口加上ContractType的Attribute,字符串表示的是该接口的合约类型。

image

  关键的地方出现了,这里声明了另外一个接口ICustomLogger,它和ILogger的合约类型是一样的。ConsoleLogger实现了ICustomLogger这个接口,Export同样表明它是输出,需要注入到某地方去的。最后是Main函数

image

  MyJob需要的注入的是ILogger类型的对象,而实际注入的是ICustomLogger类型的对象,这就是MEF的Duck Typing,只要两个接口的ContractType一致,方法的签名一致,就可以做到。就我看来这个功能的意义很大,如果某应用是动态可扩展的,那么当我想帮它做扩展的时候,不需要引用它的任何程序集,也不需要实现它的接口。这种扩展就非常独立了,而ContactType和接口签名就作为其中的约束,能够保证扩展的独立性和轻量。

MEF要正式发布估计我们还得等一段时间,且不说它是否够好,值得高兴的是开发者的选择又多了一种。  :D