创建一个MapperConfiguration并通过构造函数初始化配置:
var config = new MapperConfiguration(cfg => {cfg.CreateMap<Foo, Bar>();cfg.AddProfile<FooProfile>();});
Profile
通过Profile来组织各种映射是一个不错的方法。
public class OrganizationProfile : Profile{public OrganizationProfile(){CreateMap<Foo, FooDto>();// Use CreateMap... Etc.. here (Profile methods are the same as configuration methods)}}// How it was done in 4.x - as of 5.0 this is obsolete:// public class OrganizationProfile : Profile// {// protected override void Configure()// {// CreateMap<Foo, FooDto>();// }// }
程序集扫描
var config = new MapperConfiguration(cfg => {cfg.AddMaps(myAssembly);});var configuration = new MapperConfiguration(cfg => cfg.AddMaps(myAssembly));// Can also use assembly names:var configuration = new MapperConfiguration(cfg =>cfg.AddMaps(new [] {"Foo.UI","Foo.Core"}););// Or marker types for assemblies:var configuration = new MapperConfiguration(cfg =>cfg.AddMaps(new [] {typeof(HomeController),typeof(Entity)}););
AutoMapper 会扫描指定程序集中继承Profile的类。
名称约定
var configuration = new MapperConfiguration(cfg => {cfg.SourceMemberNamingConvention = new LowerUnderscoreNamingConvention();cfg.DestinationMemberNamingConvention = new PascalCaseNamingConvention();});public class OrganizationProfile : Profile{public OrganizationProfile(){SourceMemberNamingConvention = new LowerUnderscoreNamingConvention();DestinationMemberNamingConvention = new PascalCaseNamingConvention();//Put your CreateMap... Etc.. here}}
更换字符
public class Source{public int Value { get; set; }public int Ävíator { get; set; }public int SubAirlinaFlight { get; set; }}public class Destination{public int Value { get; set; }public int Aviator { get; set; }public int SubAirlineFlight { get; set; }}var configuration = new MapperConfiguration(c =>{c.ReplaceMemberName("Ä", "A");c.ReplaceMemberName("í", "i");c.ReplaceMemberName("Airlina", "Airline");});
识别前缀/后缀
public class Source {public int frmValue { get; set; }public int frmValue2 { get; set; }}public class Dest {public int Value { get; set; }public int Value2 { get; set; }}var configuration = new MapperConfiguration(cfg => {cfg.RecognizePrefixes("frm");cfg.CreateMap<Source, Dest>();});configuration.AssertConfigurationIsValid();
属性过滤
var configuration = new MapperConfiguration(cfg =>{// don't map any fieldscfg.ShouldMapField = fi => false;// map properties with a public or private gettercfg.ShouldMapProperty = pi =>pi.GetMethod != null && (pi.GetMethod.IsPublic || pi.GetMethod.IsPrivate);});
直接编译
由于表达式编译可能会占用一些资源,因此AutoMapper会在第一个地图上延迟编译类型地图计划。但是,这种行为并不总是令人满意的,因此您可以告诉AutoMapper直接编译其映射
var configuration = new MapperConfiguration(cfg => {});configuration.CompileMappings();
