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使用说明
.net core 3.1 WebAPi 使用 AutoMapper 9.0、10.0