ASP.NET Core Web中使用AutoMapper進行對象映射
前言
在日常開發(fā)中,我們常常需要將一個對象映射到另一個對象,這個過程中可能需要編寫大量的重復性代碼,如果每次都手動編寫,不僅會影響開發(fā)效率,而且當項目越來越復雜、龐大的時候還容易出現(xiàn)錯誤。為了解決這個問題,對象映射庫就隨之而出了,這些庫可以自動完成對象之間的映射,從而減少大量的開發(fā)工作量,提高開發(fā)工作效率。今天我們來講講在ASP.NET Core Web中使用AutoMapper快速進行對象映射。
使用對象映射庫有哪些好處?
- 減少開發(fā)工作量,提高開發(fā)效率。
- 減少開發(fā)過程中的錯誤和bug。
- 簡化代碼結構,提高代碼可讀性和可維護性。
AutoMapper對象映射庫介紹
AutoMapper是一個簡單易用的.NET對象映射庫,用于快速、方便地進行對象之間的轉換和映射,極大的簡化了開發(fā)人員在處理對象映射時的工作量。
- GitHub開源地址:https://github.com/AutoMapper/AutoMapper
- 在線文檔地址:https://docs.automapper.org/en/stable/Getting-started.html
安裝AutoMapper NuGet包
在ASP.NET Core Web API項目中搜索:AutoMapper NuGet包安裝。
圖片
創(chuàng)建源對象和目標對象
接下來我們分別定義一個源對象(Student)和一個目標對象(StudentViewModel)。
Student(源對象)
public class Student
{
/// <summary>
/// 學生ID [主鍵,自動遞增]
/// </summary>
[PrimaryKey, AutoIncrement]
[Display(Name = "學生ID")]
public int StudentID { get; set; }
/// <summary>
/// 班級ID
/// </summary>
[Display(Name = "班級ID")]
public int ClassID { get; set; }
/// <summary>
/// 學生姓名
/// </summary>
[Display(Name = "學生姓名")]
public string Name { get; set; }
/// <summary>
/// 學生年齡
/// </summary>
[Display(Name = "學生年齡")]
public int Age { get; set; }
/// <summary>
/// 學生性別
/// </summary>
[Display(Name = "學生性別")]
public string Gender { get; set; }
}
StudentViewModel(目標對象)
public class StudentViewModel
{
/// <summary>
/// 學生ID [主鍵,自動遞增]
/// </summary>
[PrimaryKey, AutoIncrement]
[Display(Name = "學生ID")]
public int StudentID { get; set; }
/// <summary>
/// 班級ID
/// </summary>
[Display(Name = "班級ID")]
public int ClassID { get; set; }
/// <summary>
/// 學生姓名
/// </summary>
[Display(Name = "學生姓名")]
public string Name { get; set; }
/// <summary>
/// 學生年齡
/// </summary>
[Display(Name = "學生年齡")]
public int Age { get; set; }
/// <summary>
/// 學生性別
/// </summary>
[Display(Name = "學生性別")]
public string Gender { get; set; }
/// <summary>
/// 班級名稱
/// </summary>
[Display(Name = "班級名稱")]
public string ClassName { get; set; }
}
配置AutoMapper映射規(guī)則
我們可以定義一個AutoMapperMappingProfile的映射配置文件,并在其中定義源類型和目標類型之間的映射關系。
using AutoMapper;
using Entity;
using Entity.ViewModel;
namespace WebApi
{
/// <summary>
/// AutoMapper映射配置文件
/// </summary>
public class AutoMapperMappingProfile : Profile
{
/// <summary>
/// 添加映射規(guī)則
/// </summary>
public AutoMapperMappingProfile()
{
CreateMap<Student, StudentViewModel>();
}
}
}
Program中注冊AutoMapper服務
使用AddAutoMapper()方法可以將AutoMapper所需的服務添加到該集合中,以便在應用程序的其他部分中使用。該方法需要傳入一個Assembly數(shù)組,以告訴AutoMapper要掃描哪些程序集來查找映射配置(在當前作用域的所有程序集里面掃描AutoMapper的配置文件)。
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
//添加 AutoMapper 的配置
//使用AddAutoMapper()方法可以將AutoMapper所需的服務添加到該集合中,以便在應用程序的其他部分中使用。
//該方法需要傳入一個Assembly數(shù)組,以告訴AutoMapper要掃描哪些程序集來查找映射配置(在當前作用域的所有程序集里面掃描AutoMapper的配置文件)。
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
}
進行對象映射操作
依賴注入獲取IMapper接口的實例
/// <summary>
/// 學生管理
/// </summary>
[ApiController]
[Route("api/[controller]/[action]")]
public class StudentController : ControllerBase
{
private readonly IMapper _mapper;
/// <summary>
/// 依賴注入
/// </summary>
/// <param name="mapper">mapper</param>
public StudentController(IMapper mapper)
{
_mapper = mapper;
}
}
進行對象映射操作
接下來我們使用使用IMapper接口的Map方法來進行對象映射操作。
var studentsListDto = _mapper.Map<List<StudentViewModel>>(students);
映射結果輸出
圖片
完整示例源代碼
- https://github.com/YSGStudyHards/EasySQLite