首页 > 代码库 > AutoMapper搬运工之配置

AutoMapper搬运工之配置

<style></style>

回顾

前几篇搬运了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 =http://www.mamicode.com/> src.Date.Date))4          .ForMember(dest => dest.EventHour, opt => opt.MapFrom(src =http://www.mamicode.com/> src.Date.Hour))5          .ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src =http://www.mamicode.com/> 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 => {23     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搬运工之自定义转换规则》

 

以上文章搬运自:https://github.com/AutoMapper/AutoMapper/wiki/Configuration

另外参考文章:http://consultingblogs.emc.com/owainwragg/archive/2010/12/15/automapper-profiles.aspx

如有不对的地方请指教,如果觉得好,请点推荐,感激不尽~

AutoMapper搬运工之配置