• 在Net6中使用AutoMapper


    概述

    1、什么是AutoMapper

            简单来说,AutoMapper就是一个用C#语言开发的一个轻量的处理一个实体对象到另外一个实体对象映射关系的组件库

            官网地址:AutoMapper

            文档地址:AutoMapper — AutoMapper documentation

    2、为什么要用AutoMapper

           层与层之间的数据转换是非常常见的事情,最简单的方式就是手动复制,(尤其使用SqlSugar之后,如果不做特殊处理,数据查询的结果一般为全字段,但是在业务层,我们提供的对外接口一般只返回有限的部分字段)当然,使用AutoMapper之后可以大大简化繁琐的工作,

    快速开始

    1、注入IMapper

    builder.Services.AddScoped();

    显然,仅仅注入IMapper之后,我们还是无法使用的,还需要在Config中初始化MapperConfiguration对象,然后我们在MapperConfiguration对象中配置两个实体对象,官网提供的例子如下,我们可以这样使用

    1. var config = new MapperConfiguration(cfg => {
    2. cfg.CreateMap();
    3. cfg.AddProfile();
    4. });

    当然我们也可以这样使用 

    1. public class OrganizationProfile : Profile
    2. {
    3. public OrganizationProfile()
    4. {
    5. CreateMap();
    6. // Use CreateMap... Etc.. here (Profile methods are the same as configuration methods)
    7. }
    8. }
    cfg.AddProfile();

     想想我们要做的工作,每增加一个对象映射,我们就需要在Program中注入一个配置文件,这样将会导致我们的Program臃肿不堪。而且不方便管理,那我们应该怎么办?有没有一劳永逸的方法。

    2、注入Profile

    对,我们需要注入Profile,我的代码结构如下:

    该类库中的所有对象都用来处理该模块中的对象映射,如下所示:

    1. public class AuthManageProfile: Profile
    2. {
    3. public AuthManageProfile()
    4. {
    5. //获取表单功能列表
    6. CreateMap();
    7. CreateMap();
    8. //菜单授权信息
    9. CreateMap();
    10. //表单授权信息
    11. CreateMap();
    12. //表单功能授权信息
    13. CreateMap();
    14. }
    15. }

     我们怎么办呢,我们只需要一次性注入就好。

    builder.Services.AddAutoMapper(Assembly.Load("SoingSoft.Business.AutoMapper").DefinedTypes.Where(t => typeof(Profile).GetTypeInfo().IsAssignableFrom(t.AsType())).Select(t => t.AsType()).ToArray());

    这段代码很关键,该代码的作用是使用反射将SoingSoft.Business.AutoMapper类库中的所有继承自Profile类的所有对象注入。

    3、使用IMapper

    我们只需要在Controller中注入我们的IMaaper对象就可以了。

    然后我们在对象的Profile对象中,增加我们的映射

    1. public class UserRoleManageProfile: Profile
    2. {
    3. public UserRoleManageProfile()
    4. {
    5. CreateMap();
    6. }
    7. }

     注意:前边为我们的数据实体,后边为我们需要映射的对象

    最后,我们只要在代码中直接使用Map方法即可完成映射

     result.arr_role = _mapper.Map>(_roleDataService.GetList());

  • 相关阅读:
    嵌入式学习-FreeRTOS-Day3
    Git学习笔记4
    抖音小店爆款制造指南:打造抖音爆款商品的八大技巧
    (十)C++中的左值lvalue&右值rvaue
    XXL-Job和SpringBoot整合进行部署(全网最全整合部署)
    数学基础从高一开始2、集合间的基本关系
    技术分享 | App测试时常用的adb命令你都掌握了哪些呢?
    Hadoop 学习笔记三 --JobClient 的执行过程
    14.haproxy+keepalived负载均衡和高可用
    JVM 内存模型概述
  • 原文地址:https://blog.csdn.net/ckk_0821/article/details/127691215