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
设置默认值。
扩展能力
每个AddName
和AddMember
类型都基于一个接口ISourceToDestinationNameMapper
和IChildMemberConfiguration
。你可以通过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"); }}
- AutoMapper官方文档(三)【约定】
- AutoMapper官方文档(一)【入门】
- AutoMapper官方文档(六)【投影】
- AutoMapper官方文档(十七)【配置】
- AutoMapper官方文档(七)【配置验证】
- AutoMapper官方文档(二)【升级指南】
- AutoMapper官方文档(八)【内联映射】
- AutoMapper官方文档(九)【列表和数组】
- AutoMapper官方文档(十)【嵌套映射】
- AutoMapper官方文档(十一)【自定义类型转换器】
- AutoMapper官方文档(十四)【依赖注入】
- AutoMapper官方文档(十五)【映射继承】
- AutoMapper官方文档(十六)【可查询扩展】
- AutoMapper官方文档(四)【扁平化(分割)映射】
- AutoMapper官方文档(五)【反向映射和复杂化】
- AutoMapper官方文档(十二)【自定义值解析器】
- AutoMapper官方文档(十三)【值转换器,Null替换,Map行为前后】
- AutoMapper官方文档(十八)【条件映射,开放泛型,了解你的映射】
- Spring MVC 集成Velocity
- [StudyNotes] 左偏树
- python2中一些模块到python3中名称的变化
- maven 打包可执行jar
- 使用window.location.hash解决ajax刷新和导航问题
- AutoMapper官方文档(三)【约定】
- 课后作业之邮箱类
- MySQL学习笔记
- 如果其他类型更适合,则尽量避免使用字符串
- MySQL数据库连接数过多的常见原因
- 蓝桥选拔第一场(E)
- 解决Android Studio2.3导入项目在 Building gradle project info 一直卡住
- Github使用方法:如何将本地的文件夹整体上传到Github上
- 私有云落地解决方案之openstack高可用(pike版本)-集群配置