映射执行之前和之后

有些场景需要在映射发生之前或者映射完成之后执行自定义逻辑。这类场景应当尽量少用,把该部分逻辑放到AutoMapper外部处理会更加清晰易懂。你可以为映射配置全局的映射前/映射后操作:

Mapper.Initialize(cfg => {
  cfg.CreateMap<Source, Dest>()
    .BeforeMap((src, dest) => src.Value = src.Value + 10)
    .AfterMap((src, dest) => dest.Name = "John");
});Code language: JavaScript (javascript)

也可以在映射定义时编写映射前、映射后的回调逻辑:

using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Mapper.Initialize(cfg => {
                cfg.CreateMap<Source, Dest>()
                  .BeforeMap((src, dest) => src.Value = "前缀_" + src.Value )
                  .AfterMap((src, dest) => dest.Value = dest.Value + "_后缀");
            });

            var s = new Source() { Value = "foxdevelop"};

            var d = Mapper.Map<Dest>(s);//前缀_北盟网校_后缀

            Console.ReadKey();
        }
    }

    public class Source
    {
        public string Value { get; set; }
    }

    public class Dest
    {
        public string Value { get; set; }
    }
}Code language: JavaScript (javascript)

当你需要在映射操作的前后传入上下文相关信息时,就适合使用上面这种配置方式。

说明

  • BeforeMap映射开始之前执行回调,可以修改源对象数据
  • AfterMap映射完成之后执行回调,可以修改目标对象数据
  • 执行顺序:BeforeMap → AutoMapper属性映射赋值 → AfterMap
Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注