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();
  • 相关阅读:
    react_瞎敲
    linux 删除类似文件
    mysql建立dblink 视图,无法查询到数据的问题
    Guava-Retrying 请求重试机制
    Command line is too long. Shorten command line for WebServiceUtilsTest.callMethod or also for JUnit default
    @Scheduled 定时任务注解不能运行
    jq拷贝表单$("#searchForm").clone(true),无法将select2数据value拷贝的问题
    正则表达式的lookaround(lookahead/lookbehind)以及密码复杂度检查
    MYSQL列的长度,NUMERIC_PRECISION和COLUMN_TYPE
    Qira-docker安装与使用
  • 原文地址:https://www.cnblogs.com/zengpeng/p/11059847.html
Copyright © 2011-2022 走看看