zoukankan      html  css  js  c++  java
  • 00.AutoMapper 之入门指南(Getting Started Guide)

    转载(https://www.jianshu.com/p/29ee5a94c1d9

    入门指南(Getting Started Guide)

    AutoMapper 是什么?

    AutoMapper 是一个对象映射器。对象映射器的原理是将输入对象转换为另一种类型的输出对象。
    AutoMapper 提供了各种约定将你的手指从重复无趣的类型A与类型B的映射中解脱出来。只要B类型遵循AutoMapper 的约定,无需任何配置就可以完成A类型与B类型的映射。

    为什么使用AutoMapper?

    因为写映射代码很无聊。测试映射代码更无聊。AutoMapper 提供简单的类型配置与映射测试。这个问题本质可能是“为什么要使用对象映射器?”,映射发生在应用程序中各个位置,但最多还是发生在层与层之间。如Ui层/Domain层或者Service层/Domain层。
    一个层的关注点经常与另一层的关注点不同,所以对象映射可以使得各个层之间的模型隔离。

    如何使用AutoMapper?

    首先,需要准备源类型和目标类型两种不同的类型。目标类型的设计可能受其所在层的影响,但只要成员的名称与源类型的成员名称匹配,AutoMapper的就能达到最佳效果。如果源类型有一个成员叫“FirstName”,将自动与目标类型中的“FirstName”映射。AutoMapper 也支持扁平化映射。

    AutoMapper 从源类型映射到目标类型时默认忽略空引用异常。如果你不喜欢这种方式,可以根据需要将AutoMapper 的方法与自定义值解析器结合使用。

    你可以使用MapperConfiguration或者 Mapper静态实例创建映射。MapperConfiguration一般为全局实例,在应用程序启动时实例化。另外,你也可以使用Mapper.Initialize

    Mapper.Initialize(cfg => cfg.CreateMap<Order, OrderDto>());
    //或者
    var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>());
    

    左侧为源类型右侧为目标类型。使用静态或者实例Mapper对象的方法执行映射。

    //使用实例的方式实例化Mapper对象
    var mapper = config.CreateMapper();
    //或者
    var mapper = new Mapper(config);
    OrderDto dto = mapper.Map<OrderDto>(order);
    // 或者使用静态Mapper对象
    OrderDto dto = Mapper.Map<OrderDto>(order);
    

    大多数应用程序可以使用依赖注入来注入创建的IMapper实例。

    对于那些在编译时可能不知道类型的情况,AutoMapper还具有这些方法的非泛型版本。

    在哪里配置AutoMapper?

    如果您使用静态Mapper方法,则每个程序域只应进行一次配置。这意味着放置配置代码的最佳位置是应用程序启动时,例如ASP.NET应用程序的Global.asax文件。通常,配置引导程序类在其自己的类中,并且从启动方法调用此引导程序类。 引导程序类应调用Mapper.Initialize来配置类型映射。

    怎么测试映射?

    要测试映射,您需要创建一个执行以下两项操作的测试:

    • 调用你的引导程序类创建映射
    • 调用MapperConfiguration.AssertConfigurationIsValid

    这是一个例子:

    var config = AutoMapperConfiguration.Configure();
    
    config.AssertConfigurationIsValid();
  • 相关阅读:
    HDU 5791 Two (DP)
    POJ 1088 滑雪 (DPor记忆化搜索)
    LightOJ 1011
    POJ 1787 Charlie's Change (多重背包 带结果组成)
    HDU 5550 Game Rooms (ccpc2015 K)(dp)
    HDU 5542 The Battle of Chibi (ccpc 南阳 C)(DP 树状数组 离散化)
    HDU 5543 Pick The Sticks (01背包)
    HDU 5546 Ancient Go (ccpc2015南阳G)
    NB-IoT的DRX、eDRX、PSM三个模式 (转载,描述的简单易懂)
    MQTT 嵌入式端通讯协议解析(转)
  • 原文地址:https://www.cnblogs.com/zengpeng/p/11059847.html
Copyright © 2011-2022 走看看