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 類型即可拿出來用了(具體的使用會在下一篇文章 編寫業務時給出)
項目完成后,如下圖所示