zoukankan      html  css  js  c++  java
  • .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的形式看起来也很清爽,但是这样写总会有些问题:

    1. 扩展更多类型时总是要加上ExportImportAttribute
    2. 看起来类不是那么纯了,特别是处女座的同学

    那么.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开头的类,然后在UtilImport所有长度是1的属性

    通过这样简单的规则,在再次添加新的类型的时候就可以不额外添加或改动多余代码了。

    当然,这种规则定义还可以更加多彩,有待你发现

    ALL Code:

    View Code

     

    标签: MEF
  • 相关阅读:
    2020/12/27
    2020/12/25 the light
    2020/12/25
    2020/12/23
    2020/12/22
    美加大量银行用户遭攻击,这些黑客到底牛到什么程度?
    揭秘马云的蚂蚁科技“整改”计划
    大众集团成功研发:可移动的电动汽车充电器,网友:太方便了
    东方联盟郭盛华的江湖往事
    5种方法!疫情期间防御恶意软件,网络钓鱼和诈骗
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2630380.html
Copyright © 2011-2022 走看看