NetCoreWeb中使用AutoMapper

276 阅读2分钟

这是我参与更文挑战的第11天,活动详情查看: 更文挑战

AutoMapper是一个轻量级的类库,主要功能是把一个对象转换成另外一个对象,而避免我们每次都手工去转换。

常见几种使用场景:

  • 对外服务接口,把逻辑层的实体转换成服务消费者需要的字段。
  • UI展现层,把业务对象转换成UI需要展现的字段。
  • 用户的输入输出,把DTO与领域模型互转。

相信大家AutoMapper可以做什么已经有了一个基本的了解,下面主要针对AutoMapper在NetCoreWeb中的使用做一个了解。

前置准备

工作中一定要多复用别人造的成熟的轮子,这样可以加快自己的工作进度。当然我的意思也不是说只要会用,我们也要知道其中的原理,但这应该是自己工作之余应该学习的内容。工作讲究的是效率,又快又好是检验工作成果的标准。

Nuget包下载

写本文章时的版本 automapper为10.0.1 AutoMapper.Extensions.Microsoft.Dependeny为8.1.1

install-package automapper

install-package AutoMapper.Extensions.Microsoft.Dependeny

项目集成

1、ConfigureServices中注入服务

services.AddAutoMapper(Assembly.Load("NetCoreWebAnalysis"));

2、定义Dto对象

工单

public class Order
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Desc { get; set; }
    public DateTime CreateTime { get; set; }
}

工单Dto

public class OrderOutPut
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Desc { get; set; }
    public string CreateYear { get; set; }
    public string CreateMonth { get; set; }
    public string CreateDay { get; set; }
}

3、配置映射关系

public class OrderProfile : Profile
{
    public OrderProfile()
    {
        CreateMap<Order, OrderOutPut>()
               .ForMember(des => des.CreateYear, source => source.MapFrom(i => i.CreateTime.Year))
               .ForMember(des => des.CreateMonth, source => source.MapFrom(i => i.CreateTime.Month))
               .ForMember(des => des.CreateDay, source => source.MapFrom(i => i.CreateTime.Day));
    }
}

4、执行映射方法测试

[Route("mapper")]
[ApiController]
public class MapperController : Controller
{
    private readonly IMapper _mapper;

    public MapperController(IMapper mapper)
    {
        _mapper = mapper;
    }

    [HttpGet("getmapper")]
    public OrderOutPut GetMapper()
    {
        var order = new Order()
        {
            Id = 1,
            Name = "工单1号",
            Desc = "工单描述内容",
            CreateTime = DateTime.Now
        };
        return _mapper.Map<OrderOutPut>(order);
    }
}

输出内容

{
    "id": 1,
    "name": "工单1号",
    "desc": "工单描述内容",
    "createYear": "2021",
    "createMonth": "5",
    "createDay": "12"
}

参考

AutoMapper.Extensions.Microsoft.DependencyInjection使用说明

AutoMapper使用

.net core 3.1 WebAPi 使用 AutoMapper 9.0、10.0

在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射

[ASP.NET Core3.1 AutoMapper组件](