zoukankan      html  css  js  c++  java
  • [非专业翻译] Mapster 映射配置

    [非专业翻译] Mapster - 映射配置

    系列介绍

    [非专业翻译] 是对没有中文文档进行翻译的系列博客,文章由机翻和译者自己理解构成,和原文相比有所有不同,但意思基本一致。

    因个人能力有限,如有谬误之处还请指正,多多包涵。

    正文

    本文将说明 Mapster 中的映射配置

    映射配置

    使用 TypeAdapterConfig<TSource, TDestination>.NewConfig()TypeAdapterConfig<TSource, TDestination>.ForType() 配置类型映射;

    当调用 NewConfig 方法时,将会覆盖已存在的类型映射配置。

    TypeAdapterConfig<TSource, TDestination>
        .NewConfig()
        .Ignore(dest => dest.Age)
        .Map(dest => dest.FullName,
            src => string.Format("{0} {1}", src.FirstName, src.LastName));
    

    如若不想覆盖之前已经创建好的映射配置,可以使用 TypeAdapterConfig<TSource, TDestination>.ForType()

    ForType 方法与 NewConfig 的差别:如果指定类型映射配置不存在,那它将创建一个新的映射,如果指定类型的映射配置已存在,那么它将会扩展已有的映射配置,而不是删除或替换已有的映射配置。

    TypeAdapterConfig<TSource, TDestination>
            .ForType()
            .Ignore(dest => dest.Age)
            .Map(dest => dest.FullName,
                src => string.Format("{0} {1}", src.FirstName, src.LastName));
    

    全局设置

    使用全局设置将映射策略应用到所有的映射配置。

    TypeAdapterConfig.GlobalSettings.Default.PreserveReference(true);
    

    对于特定的类型映射,你可以使用 TypeAdapterConfig<SimplePoco, SimpleDto>.NewConfig() 覆盖全局映射配置。

    TypeAdapterConfig<SimplePoco, SimpleDto>.NewConfig().PreserveReference(false);
    

    基于规则的映射配置

    你可以使用 When 方法,当满足某个条件时,进行一些特定的映射操作。

    下面的这个例子,当任何一个映射的 源类型和目标类型 相同时,不映射 Id 属性:

    TypeAdapterConfig.GlobalSettings.When((srcType, destType, mapType) => srcType == destType)
        .Ignore("Id");
    

    在下面这个例子中,映射配置只对 IQueryable 生效:

    TypeAdapterConfig.GlobalSettings.When((srcType, destType, mapType) => mapType == MapType.Projection)
        .IgnoreAttribute(typeof(NotMapAttribute));
    

    只配置目标类型

    在不确定源类型的时候,使用 ForDestinationType 来创建针对于 目标类型 的映射配置。

    比如使用 AfterMapping 在映射完成后调用目标类型对象的 Validate 方法:

    TypeAdapterConfig.GlobalSettings.ForDestinationType<IValidator>()
                        .AfterMapping(dest => dest.Validate());
    

    注意!在上面的代码段中指定目标类型为 IValidator 接口,那么将会把映射配置应用到所有实现了 IValidator 的类型。

    泛型类型映射

    如果映射的是泛型类型,可以通过将泛型类型传给 ForType 来创建设置.

    TypeAdapterConfig.GlobalSettings.ForType(typeof(GenericPoco<>), typeof(GenericDto<>))
        .Map("value", "Value");
    
  • 相关阅读:
    基于kubernetes v1.17部署dashboard:v2.0-beta8
    kubeadm快速部署Kubernetes单节点
    kafka数据可靠性深度解读
    MySql中4种批量更新的方法
    如何分析Mysql慢SQL
    企业级SSD市场接口之争:SATA会被NVMe取代吗?
    强势回归,Linux blk用实力证明自己并不弱!
    影响性能的关键部分-ceph的osd journal写
    文章汇总(包括NVMe SPDK vSAN Ceph xfs等)
    NVMe over Fabrics:概念、应用和实现
  • 原文地址:https://www.cnblogs.com/staneee/p/14913595.html
Copyright © 2011-2022 走看看