.NET 4.5 MEF 基于约定的编程模型重典
Managed Extensibility Framework 在 .NET 4.5 中有若干改进,这些都是源自于开源社区的推动( http://mef.codeplex.com/ )。
这改动包括:对泛型类型的支持、多作用域 及 对基于约定编程模型的支持。
什么样的代码才算是基于约定的呢,其实在 MS 其它框架中也有所体现,比如 ASP.NET MVC 中 Url Routing /EF 4.1+ 的 Fluent API 的配置 方式都可以算做基于约定的。
话说 MEF 之前是用声明式的 Attribute 来搞定代码的:
1 class Util 2 { 3 [Import] 4 public SubUtilA A { get ; set ; } 5 [Import] 6 public SubUtilB B { get ; set ; } 7 } 8 [Export] 9 class SubUtilA { } 10 [Export] 11 class SubUtilB { }
这样写当然没有什么问题, Attribute 的形式看起来也很清爽,但是这样写总会有些问题:
扩展更多类型时总是要加上 Export 和 Import 的 Attribute 看起来类不是那么纯了,特别是处女座的同学那么 .NET 4. 5 中基于约定的模型可以让我们怎么来搞定这俩问题呢?
1 class Util 2 { 3 public SubUtilA A { get ; set ; } 4 public SubUtilB B { get ; set ; } 5 } 6 class SubUtilA { } 7 class SubUtilB { }
这些是类型定义,我们不添加 Attribute
然后里,我们定义一个约定
1 var builder = new RegistrationBuilder(); 2 builder 3 .ForTypesMatching(c => c.Name.StartsWith( " SubUtil " )) 4 .Export(); 5 builder 6 .ForType<Util> () 7 .Export() 8 .ImportProperties(c => c.Name.Length == 1 );
嗯,导出所有 SubUtil 开头的类,然后在 Util 中 Import 所有长度是 1 的属性
通过这样简单的规则,在再次添加新的类型的时候就可以不额外添加或改动多余代码了。
当然,这种规则定义还可以更加多彩,有待你发现
ALL Code:
View Code
供大家学习参考,转文章随意--重典
分享到人人
分类: 问题的累积
标签: MEF
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于.NET 4.5 MEF 基于约定的编程模型重典的详细内容...