回顾 前几篇搬运了AutoMapper的基本用法,自定义映射,相信有看的同学已经会使用AutoMapper这个强大的Mapping工具了。不过细心的你是否还记得前几篇中有提到Map的创建并非是每次都需要Create,那么AutoMapper对于这些如果管理呢?这篇我们要来看看AutoMapper的配置。 初始化 AutoMapper提供一个初始化函数(Mapper.Initialize),可以在程序初始化时调用(Web应用程序可以在Global.asax里写),进行统一的配置初始化。前几个章节的CreateMap可以统一写到此处,如下: 1 Mapper.Initialize(cfg => { 2 Mapper.CreateMap<CalendarEvent, CalendarEventForm>() 3 .ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.Date.Date)) 4 .ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.Date.Hour)) 5 .ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.Date.Minute)); 6 }); OK,是不是很方便,那么问题来了,cfg是个什么东西?这里根本没用嘛? 当然不是这样的,Config里的配置还有很多的,只不过这篇我们讲如何统一处理CreateMap,其他配置可以自己敲代码看一下,如果有问题,也可以留言交流下。后面的章节里会逐个讲。 那么本篇结束了么?没有,细心的你会不会觉得在Global.asax里写这么多CreateMap严重影响了代码的美观和可维护性。如果写到外面去处理那不是更方便。当然,强大的AutoMapper已经为你想好了,不过显然这里其实也可以自己单独写一个方法来处理。 配置文件 (Profile) 如果熟悉windows的网络配置netsh wlan profile的同学肯定对Profile的概念不陌生,简单的说是按照AutoMapper的规范单独的制定了一个格式的文件,在该文件中可以预定于一些AutoMapper的配置,用于统一分门别类的管理好我们在使用AutoMapper时需要的配置。 一个标准的AutoMapper配置文件是这样子的: 1 public class OrganizationProfile : Profile 2 { 3 protected override void Configure() 4 { 5 //将CreateMap放到此处 6 } 7 8 //配置的名称,默认可以定义为当前的类名 9 public override string ProfileName 10 { 11 get { return this.GetType().Name; } 12 } 13 } 定义好了配置文件,只需要在AutoMapper初始化时添加即可: 1 Mapper.Initialize(cfg => { 2 3 cfg.AddProfile<OrganizationProfile>(); 4 }); 如果你觉得配置文件只有这么简单的功能的话,那么错了,Profile还有更强大的功能,那是每个Profile里创建的Map可以单独配置Mapping的一些规则,例如: public class OrganizationProfile : Profile { protected override void Configure() { //Mapper.CreateMap写到此处... Etc.. here SourceMemberNamingConvention = new LowerUnderscoreNamingConvention(); DestinationMemberNamingConvention = new PascalCaseNamingConvention(); } } SourceMemberNamingConvention指的是源对象的属性匹配规则,即默认的是propertyName -> propertyName的转换,这里设置了一个带下划线的匹配LowerUnderscoreNamingConvention, 即property_name -> PropertyName DestinationMemberNamingConvention指的是目标对象的属性匹配规则,这里的PascalCaseNamingConvention指的是按照Pascal驼峰命名规则来处理。这两个处理Convention是AutoMapper已经提供的,如果需要自定义更强大的Convention那么,请期待下节:《AutoMapper搬运工之自定义转换规则》