AutoMapper搬运工之配置

Helen ·
更新时间:2024-11-14
· 570 次阅读

  回顾   前几篇搬运了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搬运工之自定义转换规则》



automapper

需要 登录 后方可回复, 如果你还没有账号请 注册新账号