ASP.NET Core中AutoMapper用法

AutoMapper是什么?

AutoMapper 是一个对象-对象映射器,可以将一个对象映射到另一个对象。

官网地址:http://automapper.org/

官方文档:https://docs.automapper.org/en/latest/


一、配置Profile文件

新建一个类继承Profile

//后期的映射操作配置在这里
public class DemoProfile : Profile
    {
        public DemoProfile()
        {
            CreateMap<Member,MemberDto>().ReverseMap();//Member数据映射到MemberDto
        }
    }

写法一:

Program.cs中注册程序集,Application层中定义Profile配置文件,无需其他注册,无需Autofac,需要用的地方直接注入IMapper即可。

Program.cs中注册:

//写法一
builder.Services.AddAutoMapper(Assembly.Load("Application"), Assembly.Load("Domain"));

写法二

主要是注册方式有变化 :

//写法二
builder.Services.AddAutoMapper(cfg => {
    cfg.AddProfile<DemoProfile>();
});

这种方式可以添加多个配置文件

写法三

先创建MapperConfiguration类的实例,然后通过容器手动注册,如果应用程序已经集成了Autofac,可以不用再注册IMapper,否则需要手动注册IMapper;

//写法三
AutoMapper.IConfigurationProvider config = new MapperConfiguration(cfg =>
{
    cfg.AddProfile<DemoProfile>();
});

builder.Services.AddSingleton(config);

//如果已经集成Autofac,则不需此行
builder.Services.AddScoped<IMapper, Mapper>();

这种方式可以配置其他配置项,如源类型和目标类型 蛇形命名法驼峰命名法的映射配置等。

注入IMapper使用:

public class DefaultController : Controller
    {
        private readonly IMapper mapper;

        public DefaultController(IMapper mapper)
        {
            this.mapper = mapper;
        }

        public IActionResult Index()
        {
            Member member = new Member {
                Age = 1,
                Birthday = DateTime.Now,
                MemberId = 10,
                MemberName = "张三"
            };

            MemberDto memberDto = mapper.Map<MemberDto>(member);

            return View();
        }
    }

其他

一些高级特性,自定义配置等。

详见:https://www.cnblogs.com/gl1573/p/13098031.html