01.AutoMapper 之约定(Conventions)
转载(https://www.jianshu.com/p/d4c472d95da4)
约定(Conventions)
条件对象映射器
条件对象映射器根据源类型和目标类型之间的条件生成新类型映射。
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:如果不设置这个,扁平化的对象映射将被禁用。
替换字符
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 Getting 的默认值
AddMemberConfiguration().AddMember<NameSplitMember>().AddName<PrePostfixName>(_ => _.AddStrings(p => p.Prefixes, "Get"))
如果不使用AddMemberConfiguration(),则由Configuration设置默认值。
扩展能力
每个AddName和AddMember类型都基于接口ISourceToDestinationNameMapper和IChildMemberConfiguration。 您可以通过继承接口创建自己的类,通过lambda语句参数配置其属性,这样您就可以对AutoMapper如何解析属性映射进行微调。
多种配置
每个配置都是它自己的一套规则,所有这些规则都必须通过才能说明属性已映射。如果进行多种配置,则它们彼此完全分离。
配置文件(Profiles)
这些可以添加到Profile以及ConfigurationStore。
每个Profiles规则彼此分开,不会共享任何条件。如果从一个Profile的AddConditionalObjectMapper生成映射,则只能使用该'Profile'的AddMemberConfigurations来解析属性映射。
例子
下面显示的是两个Profile,用于制定与数据传输对象(Data Transfer Object)之间传输的约定。 每个都被一种映射方式隔离 并且都明确规定了规则。
// 使用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");
}
}
01.AutoMapper 之约定(Conventions)的更多相关文章
- X86调用约定 calling convention
http://zh.wikipedia.org/wiki/X86%E8%B0%83%E7%94%A8%E7%BA%A6%E5%AE%9A 这里描述了在x86芯片架构上的调用约定(calling con ...
- 使用AutoMapper
一.AutoMapper初探: [参考Using AutoMapper: Getting Started] 1.新建空的ASP.NET MVC项目. 2.在Models文件夹添加类: public c ...
- 一文为你详细讲解对象映射库【AutoMapper】所支持场景
前言 在AutoMapper未出世前,对象与对象之间的映射,我们只能通过手动为每个属性一一赋值,时间长了不仅是我们而且老外也觉得映射代码很无聊啊.这个时候老外的所写的强大映射库AutoMapper横空 ...
- .NET平台下,初步认识AutoMapper
初步认识AutoMapper AutoMapper 初步认识AutoMapper 前言 手动映射 使用AutoMapper 创建映射 Conventions 映射到一个已存在的实例对象 前言 通常 ...
- 初步认识AutoMapper
AutoMapper 初步认识AutoMapper 前言 手动映射 使用AutoMapper 创建映射 Conventions 映射到一个已存在的实例对象 前言 通常在一个应用程序中,我们开发 ...
- .net core启用 autoMapper
启用 autoMapper autoMapper 基于约定的对象映射器 目录 安装包 添加服务 书写映射关系 安装包 需要安装两个包:AutoMapper和AutoMapper.Extensi ...
- 00.AutoMapper 之入门指南(Getting Started Guide)
转载(https://www.jianshu.com/p/29ee5a94c1d9) 入门指南(Getting Started Guide) AutoMapper 是什么? AutoMapper 是一 ...
- 初步认识AutoMapper转载 https://www.cnblogs.com/fred-bao/p/5700776.html
初步认识AutoMapper AutoMapper 初步认识AutoMapper 前言 手动映射 使用AutoMapper 创建映射 Conventions 映射到一个已存在的实例对象 前言 通常 ...
- [.NET] - 初步认识AutoMapper
初步认识AutoMapper AutoMapper 初步认识AutoMapper 前言 手动映射 使用AutoMapper 创建映射 Conventions 映射到一个已存在的实例对象 前言 通常 ...
随机推荐
- mysql NULL函数 语法
mysql NULL函数 语法 作用:如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录.这意味着该字段将以 NULL 值保存. 说明:NULL 值的处理方式与其 ...
- python – 如何禁用Django的CSRF验证?
如果只需要一些视图不使用CSRF,可以使用@csrf_exempt: from django.views.decorators.csrf import csrf_exempt @csrf_exempt ...
- CDOJ 1073 线段树 单点更新+区间查询 水题
H - 秋实大哥与线段树 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Submit S ...
- C++中string常用函数用法总结
string(s小写)是C++标准库中的类,纯C中没有,使用时需要包含头文件#include<string>,注意不是<string.h>,下面记录一下string中比较常用的 ...
- php 配置优化
调整php内存限制 vim /usr/local/php/php.ini memory_limit = 1024M 内存优化 /usr/local/php/etc/php-fpm.conf https ...
- Spring Boot教程(二十二)使用Swagger2构建强大的RESTful API文档(1)
由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...
- HDU1847--Good Luck in CET-4 Everybody!(SG函数)
Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载 ...
- Windows Server 部署WEB API时内部错误
Windows Server 部署WEB API时,发生HTTP 错误 500.21 - Internal Server Error,如图所示: 错误原因:IIS注册Framework4.0 解决方法 ...
- Jar包方式运行web项目
使用Maven进行打包 在自己的电脑终端中进入到pom.xml文件的目录中执行maven打包.命令为: mvn clean package 1 成功的标志为上面显示BUILD SUCCESS成功打包 ...
- MapReduce数据倾斜的解决方式
数据倾斜:由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点.map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时 ...