AutoMapper官方文档(三)【约定】

来源:互联网 发布:中国的未来在哪里 知乎 编辑:程序博客网 时间:2024/05/18 18:18

有条件的对象映射器

条件对象映射器根据源和目标类型之间的条件创建新的类型映射。

var config = new MapperConfiguration(cfg => {    cfg.AddConditionalObjectMapper().Where((s, d) => s.Name == d.Name + "Dto");});

成员配置

成员配置就像配置,但是你可以完全控制什么要用和不用。

var config = new MapperConfiguration(cfg => { cfg.AddMemberConfiguration(); });

AddMemberConfiguration()从空白的开始。 默认情况下在配置中应用的所有内容都是以开始的。

命名约定

AddMemberConfiguration().AddMember<NameSplitMember>()得到你默认的命名约定功能.

可以通过在参数中传递一个lambda来覆盖源和目标成员的命名约定。 SourceExtentionMethods也可以在这里设置。

如果你没有设置任何东西,AutoMapper将使用DefaultMember,它只会使用属性名来检查。

PS:如果你没有设置这个Flattening对象将被禁用。

替换字符

AddMemberConfiguration().AddName<ReplaceName>(_ => _.AddReplace("Ä", "A").AddReplace("í", "i"));

识别 前/后缀

AddMemberConfiguration().AddName<PrePostfixName>(_ => _.AddStrings(p => p.Prefixes, "Get", "get").AddStrings(p => p.DestinationPostfixes, "Set"));

属性支持

AddMemberConfiguration().AddName<SourceToDestinationNameMapperAttributesMember>(); * 目前一直在

查找属性/字段的SourceToDestinationMapperAttribute实例,并调用用户定义的isMatch函数来查找成员匹配项。

MapToAttribute是其中的一个,它将根据提供的名称匹配属性。

public class Foo{    [MapTo("SourceOfBar")]    public int Bar { get; set; }}

获取AutoMapper默认值

AddMemberConfiguration().AddMember<NameSplitMember>().AddName<PrePostfixName>(_ => _.AddStrings(p => p.Prefixes, "Get"))

如果不使用AddMemberConfiguration(),则由Configuration设置默认值。

扩展能力

每个AddNameAddMember类型都基于一个接口ISourceToDestinationNameMapperIChildMemberConfiguration。你可以通过lambda语句参数来创建自己的类,并通过lambda语句参数来配置它们的属性,所以你可以对AutoMapper解析属性映射的方式进行微调。

多个配置

每个配置都是自己的一套规则,所有的规则都必须通过才能说一个属性被映射。如果你做了多个配置,它们是完全独立的。

简介

这些可以添加到配置文件以及ConfigurationStore

每个配置文件规则是相互分开的,不会共享任何条件。如果从一个配置文件的AddConditionalObjectMapper生成一个映射,则只有该配置文件的AddMemberConfiguration可用于解析属性映射。

例子

下面显示的是用于制定传输到数据传输对象和从数据传输对象传输数据的两个配置文件。每一个都是孤立的映射的一种方式,并明确规定了每一方的规则。

//用NameSplitMember压平//仅适用于以Dto结尾的目标名称相同的类型//只应用Dto修补程序到源属性public class ToDTO : Profile{    protected override void Configure()    {        AddMemberConfiguration().AddMember<NameSplitMember>().AddName<PrePostfixName>(                _ => _.AddStrings(p => p.Postfixes, "Dto"));        AddConditionalObjectMapper().Where((s, d) => s.Name == d.Name + "Dto");    }}//不平坦的对象//只适用于具有以Dto结尾的源名称相同的类型//只应用Dto修补程序到目标属性public class FromDTO : Profile{    protected override void Configure()    {        AddMemberConfiguration().AddName<PrePostfixName>(                _ => _.AddStrings(p => p.DestinationPostfixes, "Dto"));        AddConditionalObjectMapper().Where((s, d) => d.Name == s.Name + "Dto");    }}
阅读全文
0 0