ASP.NET Core搭建多层网站架构【8.2-使用AutoMapper映射实体对象】

ASP.NET Core搭建多层网站架构【8.2-使用AutoMapper映射实体对象】

2020/01/29, ASP.NET Core 3.1, VS2019, AutoMapper.Extensions.Microsoft.DependencyInjection 7.0.0

摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【8.2-使用AutoMapper映射实体对象】
用依赖注入的方法使用AutoMapper映射

文章目录

此分支项目代码

本章节介绍了使用AutoMapper映射实体对象的注册部分,用依赖注入的方法使用AutoMapper映射,具体是如何使用的会在下一章节编写业务时做出示范

添加包引用#

MS.Models类库添加包引用:

<ItemGroup>
  <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="7.0.0" />
</ItemGroup>

这个包是AutoMapper的扩展包,让ASP.NET Core网站可以通过依赖注入的方式使用mapper映射

添加映射配置#

MS.Models类库中新建Automapper文件夹,在该文件夹下新建RoleProfile.cs类:

using AutoMapper;
using MS.Entities;
using MS.Models.ViewModel;

namespace MS.Models.Automapper
{
    public class RoleProfile : Profile
    {
        public RoleProfile()
        {
            CreateMap<RoleViewModel, Role>();

            //CreateMap<User, UserData>()
            //    .ForMember(a => a.Id, t => t.MapFrom(b => b.Id))
            //    .ForMember(a => a.RoleName, t => t.MapFrom(b => b.Role.Name))
            //    .ForMember(a => a.RoleDisplayName, t => t.MapFrom(b => b.Role.DisplayName))
            //    .ForMember(a => a.MainDepartmentId, t => t.MapFrom(b => b.UserDepartments.First(x => x.IsMainDepartment == true).Department.Id))
            //    .ForMember(a => a.MainDepartmentDisplayName, t => t.MapFrom(b => b.UserDepartments.First(x => x.IsMainDepartment == true).Department.GetDisplayName()))
            //    ;
        }
    }
}
  • 必须要继承Profile,在构造函数中创建映射配置
  • 我的习惯是一个类别的放在一起,例如所有角色相关的映射配置,都放在RoleProfile.cs中,同理再有用户相关的,则另外新建一个UserProfile.cs
  • AutoMapper默认会将两个类相同的字段进行映射,而我们的RoleViewModel映射到Role,这两个类都比较简单,没有完全体现AutoMapper的功能,所以下方的注释使用了ForMember功能,可以指定映射的字段。更多功能可以去看官方文档

封装Ioc注册#

在Automapper文件夹下新建AutomapperServiceExtensions.cs类:

using AutoMapper;
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;

namespace MS.Models.Automapper
{
    public static class ModelExtensions
    {
        /// <summary>
        /// 注册automapper服务
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        public static IServiceCollection AddAutomapperService(this IServiceCollection services)
        {
            //将AutoMapper映射配置所在的程序集名称注册
            services.AddAutoMapper(Assembly.Load(Assembly.GetExecutingAssembly().GetName().Name));
            return services;
        }
    }
}

将AutoMapper映射配置所在的程序集名称注册封装起来

注册AutoMapper服务#

MS.WebApi应用程序的Startup.cs类中注册服务:

//using MS.Models.Automapper;
//添加以上代码至using
//注册automapper服务
services.AddAutomapperService();

完成后如下图所示

至此介绍了使用依赖注入的方式注册Automapper,注册的配置文件也是继承自Profile
使用的时候从构造器中解析出IMapper Mapper 类型即可拿出来用了(具体的使用会在下一篇文章 编写业务时给出)

项目完成后,如下图所示

作者:kasnti

出处:https://www.cnblogs.com/kasnti/p/12240900.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值