首页 > 其他分享 >通过对象属性名称从AutoMapper获取目标对象属性

通过对象属性名称从AutoMapper获取目标对象属性

时间:2022-11-13 16:24:06浏览次数:62  
标签:DTO 对象 CreateMap AutoMapper public 属性

一、什么是AutoMapper

  • AutoMapper的作用是把一个对象转化为另一个对象,避免每次都去转化。
  • 使用DTO实现表现层与领域Model的解耦,用AutoMapper来实现DTO与领域Model的相互转换
  • 为什么要用DTO?
    1. DTO更注重数据,对领域对象进行合理封装,从而不会将领域对象的行为过分暴露给表现层
    2. DTO是面向UI的需求而设计的,而领域模型是面向业务而设计的。因此DTO更适合于和表现层的交互,通过DTO我们实现了表现层与领域Model之间的解耦,因此改动领域Model不会影响UI层
    3. DTO说白了就是数据而已,不包含任何的业务逻辑,属于瘦身型的对象,使用时可以根据不同的UI需求进行灵活的运用
      先创建类,在类中实现映射的方法
    使用场景
    • 对外服务接口
    • UI展现层
    • 用户的输入输出
      public class Test1 : Profile
      {
          public Test1()
          {
              //两个类型之间的映射
              CreateMap<classA, classB>().ReverseMap();
              CreateMap<classC, classD>().ReverseMap();
              
              //映射的对象名称不一样
              CreateMap<AddressDto, Address>().ForMember(d => d.Country, opt => opt.MapFrom(s => s.CountryName));
              //或者
              CreateMap<AddressDto, Address>().ConstructUsing(cp => new Address
              {
                  CountryName=cp.Country
              }).ReverseMap();
          }
      }
      
      public class Test2 : Profile
      {
          public Test2()
          {
              CreateMap<classA1, classB1>().ReverseMap();
              CreateMap<classC1, classD1>().ReverseMap();
          }
      }

      在需要的地方进行映射就OK了

                   

Mapper.Map<classB1>(info);

二、获取AutoMapper所对应的属性

      使用场景,当建立好一个对象所以对应的转换对象,然后如何通过一个对象的属性名而获取对应转换对象属性名呢? AutoMapper能够将一个对象转换另一个对象,那么一定是将两者的相关属性匹配存储起来,然后再一一转换即可。即然思是这样的那么通过一个属性名获取对应对象属性名一定是可行呢,那么AutoMapper是有自带这样的方法吗,让你失望了我本没有发现,所以只能自己来扩展了。

 public string GetDestinationPropertyFor<TSrc, TDst>(string sourceProperty)
        {
            var map =Mapper.ConfigurationProvider.As<IGlobalConfiguration>().FindTypeMapFor<TSrc, TDst>();
            var propertyMap = map?.PropertyMaps.FirstOrDefault(pm => pm.SourceMember == typeof(TSrc).GetProperty(sourceProperty));
            return propertyMap?.DestinationName ?? String.Empty;
        }

 

标签:DTO,对象,CreateMap,AutoMapper,public,属性
From: https://www.cnblogs.com/hnwl0507/p/16886172.html

相关文章

  • 类和对象——继承
    概念:有些类与类之间存在特殊关系(如例图)  这些类在定义的时候,下级别的成员除了拥有上一级的共性,还有自己的特性。。此时采用继承的技术,可以减少重复的代码片段。就像......
  • 类和对象——C++运算符重载
    概念:对已有的运算符重新定义,赋予其另一种功能,以适应不同数据类型。。重载的两类方法:1.类成员函数重载2.全局函数重载注意:运算符重载也可以实现函数重载引入:我们希望......
  • <三>对象的浅拷贝和深拷贝问题
    先看示例代码点击查看代码#include<iostream>#include<cstring>usingnamespacestd;classStudent{public:Student(int_age,constchar*_name)......
  • 第6章Spring与Web-使用 Spring 的监听器 ContextLoaderListener使得将spring容器对象
    第6章Spring与Web在Web项目中使用Spring框架,首先要解决在web层(这里指Servlet)中获取到Spring容器的问题。只要在web层获取到了Spring容器,便可从容器中获取到......
  • 关于 Angular 部署以及 index.html 里 base hRef 属性的关联关系
    直接在SAP电商云SpartacusUI项目下,运行命令行ngbuild,输出如下:dist文件夹:把dist文件夹下的mystore直接放到tomcatwebapps文件夹下面,运行时:如果修改......
  • 02类与对象-动手动脑
    代码:classRoot{ static { System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } publicRoot() { System.out.println("Root......
  • 02-类与对象-一个有趣的问题
    静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)? 代码:package test; publicclassjingtaihanshu{in......
  • 02类与对象--ObjectEquals
    代码:publicclassObjectEquals{ publicstaticvoidmain(String[]args) { MyTestClassobj1=newMyTestClass(100); MyTestClassobj2=newMyTestClass(100);......
  • 02类与对象--动手动脑
      原因:在主函数下面定义了一个自定义的Foo()构造方法,将导致系统不再默认提供构造方法修改方法:1.删除Foo(int)的定义 2.再敲一下Foo()默认构造函数......
  • 02-类与对象 进行试验--Java字段初始化的规律
    1.类的构造方法(1)“构造方法”,也称为“构造函数”,当创建一个对象时,它的构造方法会被自动调用。构造方法与类名相同,没有返回值。(2)如果类没有定义构造函数,Java编译器......