AutoMapper搬运工之配置

发表于:2015-1-13 10:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:笋干    来源:51Testing软件测试网采编

  回顾
  前几篇搬运了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搬运工之自定义转换规则》
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号