asp.net core 3.1.x 中使用AutoMapper

ChaITSimpleLove發表於2020-08-15

AutoMapper作用

  • AutoMapper的作用是把一個物件轉化為另一個物件,避免每次都去轉化;
  • 使用DTO實現表現層與領域Model的解耦,用AutoMapper來實現DTO與領域Model的相互轉換;
基於訪問性的控制或從模型本身上考慮。對外開放的原則是,儘量降低系統耦合度,否則內部一旦變更外部所有的介面都要跟隨發生變更;另外,系統內部的一些資料或方法並不希望外部能看到或呼叫。類似的考慮很多,只是舉個例子。系統設計的原則是高內聚低耦合,儘量依賴抽象而不依賴於具體。這裡感覺automapper就是使資料庫實體對一個外部呼叫實體的轉換更簡便(不用一個屬性一個屬性的賦值)。

AutoMapper uses a fluent configuration API to define an object-object mapping strategy. 
AutoMapper uses a convention-based matching algorithm to match up source to destination values. 
AutoMapper is geared towards model projection scenarios to flatten complex object models to DTOs and other simple objects, whose design is better suited for serialization, communication, messaging, or simply an anti-corruption layer between the domain and application layer.

AutoMapper supports the following platforms:
.NET 4.6.1+
.NET Standard 2.0+

官網:http://automapper.org/
文件:https://automapper.readthedocs.io/en/latest/index.html
GitHub:https://github.com/AutoMapper/AutoMapper/blob/master/docs/index.rst

 

什麼是DTO?

DTO(Data Transfer Object)就是資料傳輸物件(貧血模型),說白了就是一個物件,只不過裡邊全是資料而已。

為什麼要用DTO?

  1. DTO更注重資料,對領域物件進行合理封裝,從而不會將領域物件的行為過分暴露給表現層;
  2. DTO是面向UI的需求而設計的,而領域模型是面向業務而設計的。因此DTO更適合於和表現層的互動,通過DTO我們實現了表現層與領域Model之間的解耦,因此改動領域Model不會影響UI層;
  3. DTO說白了就是資料而已,不包含任何的業務邏輯,屬於瘦身型(也稱貧血型)的物件,使用時可以根據不同的UI需求進行靈活的運用;

應用場景

  • 對外服務介面資料模型;
  • UI層檢視模型;
  • 使用者的輸入輸出引數化模型;

如何在asp.net core 3.1.x 中應用AutoMapper實現模型轉化對映?

  • Microsoft Visual Studio Enterprise 2019 版本 16.6.4;
  • .net core 3.1.7;
  • Nuget包:AutoMapper.Extensions.Microsoft.DependencyInjection -Version 8.0.1;

1. 新建專案【UseAutoMapperDemo】如下所示:

2.使用Nuget在專案中安裝依賴包;

Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection -Version 8.0.1

 對建立的專案改造一下,新建資料夾【Model】分別新增兩個模型類【PersonA 和 PersonB】方便後面的演示使用;

2. 建立AutoMapper對映規則:在資料夾【Model】中新建類【AutoMapperProfile】配置模型的對映規則;

3. 在Startup的ConfigureServices中新增AutoMapper:

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    #region 新增AutoMapper
    services.AddAutoMapper(typeof(AutoMapperProfile));
    #endregion
}

//注意:引入對應的名稱空間;
using AutoMapper;
using UseAutoMapperDemo.Model;

4. 在Controller建構函式中注入你的IMapper:

#region 註冊IMapper
private readonly IMapper mapper;
public ValuesController(IMapper mapper)
{
   this.mapper = mapper;
}
#endregion

5. 使用 AutoMapper 實現物件轉化;

//單物件轉化
var personB = mapper.Map<PersonB>(personA);

//List集合物件轉化
var personBs = mapper.Map<List<PersonB>>(personAs);

以上內容就是AutoMapper在asp.net core 3.1.x的api專案中的基本使用,更多使用請檢視官網;

demo專案下載:UseAutoMapperDemo.zip

相關文章