.NET 4.5 MEF 基于约定的编程模型重典
Managed Extensibility Framework 在 .NET 4.5 中有若干改进,这些都是源自于开源社区的推动( http://mef.codeplex测试数据/ )。
这改动包括:对泛型类型的支持、多作用域 及 对基于约定编程模型的支持。
什么样的代码才算是基于约定的呢,其实在 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://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于.NET 4.5 MEF 基于约定的编程模型重典的详细内容...