好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

.NET 4.5 MEF 基于约定的编程模型重典

.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 基于约定的编程模型重典的详细内容...

  阅读:43次