AutoMapper使用记录

本文最后更新于:2021年9月29日 下午

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中注入服务

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

2、定义Dto对象

工单

1
2
3
4
5
6
7
public class Order
{
public int Id { get; set; }
public string Name { get; set; }
public string Desc { get; set; }
public DateTime CreateTime { get; set; }
}

工单Dto

1
2
3
4
5
6
7
8
9
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、配置映射关系

1
2
3
4
5
6
7
8
9
10
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、执行映射方法测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[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);
}
}

输出内容

1
2
3
4
5
6
7
8
{
"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组件