网上使用AutoMapper的文章很多,就不多说了。这里主要记录一下怎么在项目中配置和使用。
首先是从NuGet获取AutoMapper。
在Startup.cs文件中注册AutoMapper服务
public void ConfigureServices(IServiceCollection services) { services.AddAutoMapper();
.... }
一般把AutoMapper的映射关系单独写在一个Profile文件,比如个人习惯在Service层添加一个ServiceProfile.cs文件(这是因为所有的实体和Dto都是在Service层定义的),可能的样子如下:
public class ServiceProfiles : Profile { public ServiceProfiles() { CreateMap<WxAccount, WxAccountSessionDto>(); CreateMap<WxNews, WxNewsListDto>(); CreateMap<WxMessage, WxMessageListDto>() .ForMember(w => w.MatchType, opts => { opts.ResolveUsing<WxMessageListDtoResolver>(); }); } }
这个文件也没什么好说的,必须继承自AutoMapper.Profile,在构造函数中创建映射关系,具体使用可看看其他大神的文章,这里就不班门弄斧了。
接下来就是最后一步,在项目中使用定义的ServiceProfile,AutoMapper提供了一个Initialize方法,具体用法如下:
Mapper.Initialize(cfg => { cfg.AddProfile<ServiceProfiles>(); });
这里要注意这句代码的位置,要写在Startup.cs的构造函数内
public Startup(IConfiguration configuration) { Configuration = configuration; LoggerRepository = LogManager.CreateRepository("NETCoreRepository"); XmlConfigurator.Configure(LoggerRepository, new FileInfo(Environment.CurrentDirectory + "\\Config\\log4net.config")); Mapper.Initialize(cfg => { cfg.AddProfile<ServiceProfiles>(); }); Mapper.AssertConfigurationIsValid(); }
之前就是因为把初始化代码写在ConfigureServices方法内导致配置项不起作用,特此标记。
结束,谢谢~