专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

AutoMapper一个优秀的.NET对象-对象映射器

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:44:20       共计:3593 浏览

1 什么是AutoMapper?

AutoMapper是一个对象-对象映射器。对象-对象映射通过将一种类型的输入对象转换为另一种类型的输出对象来工作。使AutoMapper变得有趣的是,它提供了一些有趣的约定,以免去弄清楚如何将类型A映射为类型B。只要类型B遵循AutoMapper既定的约定,就需要几乎零配置来映射两个类型。

2 为什么要使用AutoMapper?

映射代码很无聊。测试映射代码更加无聊。AutoMapper提供了简单的类型配置以及简单的映射测试。真正的问题可能是“为什么使用对象-对象映射?” 映射可以在应用程序的许多地方发生,但主要发生在层之间的边界中,例如,UI/域层或服务/域层之间。一层的关注点通常与另一层的关注点冲突,因此对象-对象映射导致分离的模型,其中每一层的关注点仅会影响该层中的类型。

3 如何使用AutoMapper?

首先,将AutoMapper,AutoMapper.Extensions.Microsoft.DependencyInjection的NuGet软件包安装到您的应用程序中。

dotnet add package AutoMapper dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection 

然后,创建DomainToDTOProfile,Todo,TodoDTO类

namespace AutoMapper.WebApi01 { public class DomainToDTOProfile : Profile { public DomainToDTOProfile() {
            CreateMap<Todo, TodoDTO>();
        }
    }
} public class Todo { #region Public Properties public Guid Id { get; set; } public string Name { get; set; } #endregion } public class TodoDTO { #region Public Properties public Guid Id { get; set; } public string Name { get; set; } #endregion  } 

接着,在Startup.ConfigureServices中增加services.AddAutoMapper;

public void ConfigureServices(IServiceCollection services) {
    services.AddControllers();
    services.AddSwaggerGen(c => {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "Autofac.WebApi", Version = "v1" });
    });

    services.AddAutoMapper(typeof(DomainToDTOProfile));
} 

最后,增加HomeController,创建Todo对象,然后将Todo对象映射给TodoDTO

using Microsoft.AspNetCore.Mvc; using System; namespace AutoMapper.WebApi01.Controllers {
    [Route("[controller]")]
    [ApiController] public class HomeController : Controller { private readonly IMapper mapper; // <-添加此行 public HomeController(IMapper mapper) { this.mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
        }

        [HttpGet] public TodoDTO Get() { var todo = new Todo
            {
                Id = new Guid("9a007349-23fa-45da-97a1-2999f923b5a7"),
                Name = "小明",
            }; var todoDTO = mapper.Map<TodoDTO>(todo); return todoDTO;
        }
    }
} 

让我们来看看输出结果:

{ "id": "9a007349-23fa-45da-97a1-2999f923b5a7", "name": "小明" } 
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:C# AutoMapper 使用方法总结 | ·下一条:C# 多线程的等待所有线程结束

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有