多层架构中存在多种模型,如视图模型ViewModel,数据传输对你DTO,ORM对象等,这些数据在层与层之间进行传输必须涉及类型之间的转换。
AutoMapper是一个对象-对象映射器,作用是通过设置好的映射规则把一个对象转化为另一个对象,避免每次都去手动写转换代码。
AutoMapper仅是其中一种方式,现在类似的组件多的多,简单点的自己也可以写,用顺手了哪家都OK。
使用:
1、Nuget引用:
2、ConfigureServices中进行服务注册(程序集方式):
1 //添加AutoMapper 2 services.AddAutoMapper(typeof(StartupHelp.MapperProfiles).Assembly);
StartupHelp.MapperProfiles就是要注册的类型所在程序集
3、配置映射规则:
1 public class MapperProfiles : AutoMapper.Profile 2 { 3 public MapperProfiles() 4 { 5 CreateMap<Manager, ManagerModel>().ReverseMap(); 6 } 7 }
这里是最简单的映射规则,还可以针对属性不匹配或者其他情况进行映射规则处理
4、使用:
1 public class ManagerService : IManagerService 2 { 3 private readonly IManagerRepository _repository; 4 private readonly IMapper _mapper; 5 6 public ManagerService(IManagerRepository repository, IMapper mapper) 7 { 8 this._repository = repository; 9 this._mapper = mapper; 10 } 11 12 public async Task<ManagerModel> GetManagerAsync(string username) 13 { 14 var obj = await _repository.GetManager(username); 15 return _mapper.Map<ManagerModel>(obj); 16 } 17 }
这里用到了构造函数注入,_mapper.Map<ManagerModel>(obj); 一句话即可实现对象之间的转换。
官方Github地址:https://github.com/AutoMapper/AutoMapper
官方文档(英文):https://automapper.readthedocs.io/en/latest/Getting-started.html