Automapper C#(開發者的工作原理)
Automapper 是 C# 中一個多功能且強大的程式庫,旨在促進物件到物件的映射,使在複雜物件模型之間的資料傳輸更容易且更易於維護。 在本文中,我們將探索如何使用 Automapper 有效地映射屬性、展平複雜的物件模型,並處理各種型別的物件,如使用者領域物件和資料傳輸物件。
Automapper 簡介
Automapper in C# 是一個物件到物件的映射工具,可以簡化不同物件型別之間的轉換和資料傳輸。這在涉及資料實體及其轉換為資料傳輸物件 (DTO) 的情景中特別有用。
Automapper 的主要特點
- 程式碼簡化:Automapper 通過自動屬性映射大大減少手動程式碼的需求,從而防止錯誤並節省時間。
- 映射配置的靈活性:Automapper 允許對映射配置進行詳細的自訂,以適應廣泛的映射情景。
- 性能效率:該程式庫設計用於處理大型且複雜的物件模型,而不會有明顯的性能開銷。
開始使用 Automapper
要使用 Automapper,首先必須通過套件管理器控制台安裝它,這是一個開發環境的組件,便於管理軟體包。
通過套件管理器控制台安裝
您可以通過在套件管理器控制台中執行一個簡單的命令,輕鬆地將 Automapper 安裝到您的專案中:
Install-Package AutoMapper
設置基本映射配置
using Automapper 的基礎步驟是定義映射配置。 這涉及指定如何將輸入物件(來源)的屬性傳輸到輸出物件(目的地)。
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<SourceClass, DestinationClass>();
});
IMapper mapper = config.CreateMapper();
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<SourceClass, DestinationClass>();
});
IMapper mapper = config.CreateMapper();
Dim config = New MapperConfiguration(Sub(cfg)
cfg.CreateMap(Of SourceClass, DestinationClass)()
End Sub)
Dim mapper As IMapper = config.CreateMapper()
- 在上面的例子中,建立了一個映射配置,以將屬性從
SourceClass映射到DestinationClass。 - 然後使用這個配置建立一個
IMapper的實例。
與 Automapper 進行高級映射技術
Automapper 的能力遠不止於簡單的屬性對屬性映射。 它可以熟練地處理更複雜的情景。
展平複雜的物件模型
Automapper 的一個優點是其展平複雜物件模型的能力。 當處理巢狀物件時,此功能尤其有用,可以將這些巢狀屬性映射到平面的目的地類結構中。
多元物件型別處理
Automapper 能夠在各種物件型別之間熟練地映射,包括使用者領域物件、DTO 與即時模型,提供了一個多樣化解決不同資料傳輸需求的解決方案。
實用用例範例
為了更好地理解 Automapper 的實用性,讓我們探索一些實用的範例。
範例 1:簡單映射
考慮一個我們需要將屬性從使用者實體映射到使用者 DTO 的情境:
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string City { get; set; }
}
public class UserDTO
{
public string FullName { get; set; }
public string Address { get; set; }
public string City { get; set; }
}
// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<User, UserDTO>()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
});
IMapper mapper = config.CreateMapper();
User user = new User { FirstName = "John", LastName = "Doe", Address = "123 Street", City = "CityName" };
UserDTO userDto = mapper.Map<UserDTO>(user);
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string City { get; set; }
}
public class UserDTO
{
public string FullName { get; set; }
public string Address { get; set; }
public string City { get; set; }
}
// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<User, UserDTO>()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
});
IMapper mapper = config.CreateMapper();
User user = new User { FirstName = "John", LastName = "Doe", Address = "123 Street", City = "CityName" };
UserDTO userDto = mapper.Map<UserDTO>(user);
Public Class User
Public Property FirstName() As String
Public Property LastName() As String
Public Property Address() As String
Public Property City() As String
End Class
Public Class UserDTO
Public Property FullName() As String
Public Property Address() As String
Public Property City() As String
End Class
' Mapping Configuration
Private config = New MapperConfiguration(Sub(cfg)
cfg.CreateMap(Of User, UserDTO)().ForMember(Function(dest) dest.FullName, Function(opt) opt.MapFrom(Function(src) src.FirstName & " " & src.LastName))
End Sub)
Private mapper As IMapper = config.CreateMapper()
Private user As New User With {
.FirstName = "John",
.LastName = "Doe",
.Address = "123 Street",
.City = "CityName"
}
Private userDto As UserDTO = mapper.Map(Of UserDTO)(user)
- 此範例展示了
User和UserDTO之間的映射,其中FullName在UserDTO中是FirstName和LastName從User中串聯而成的。
範例 2:與複雜物件的高級映射
在一個更複雜的情形中,讓我們將具有巢狀使用者詳細資訊的訂單物件映射到簡化的訂單 DTO:
public class Order
{
public User OrderedBy { get; set; }
// Other properties...
}
public class OrderDTO
{
public string FullName { get; set; }
// Other properties...
}
// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Order, OrderDTO>()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.OrderedBy.FirstName + " " + src.OrderedBy.LastName));
});
IMapper mapper = config.CreateMapper();
Order order = new Order { OrderedBy = new User { FirstName = "Jane", LastName = "Doe" } };
OrderDTO orderDto = mapper.Map<OrderDTO>(order);
public class Order
{
public User OrderedBy { get; set; }
// Other properties...
}
public class OrderDTO
{
public string FullName { get; set; }
// Other properties...
}
// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Order, OrderDTO>()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.OrderedBy.FirstName + " " + src.OrderedBy.LastName));
});
IMapper mapper = config.CreateMapper();
Order order = new Order { OrderedBy = new User { FirstName = "Jane", LastName = "Doe" } };
OrderDTO orderDto = mapper.Map<OrderDTO>(order);
Public Class Order
Public Property OrderedBy() As User
' Other properties...
End Class
Public Class OrderDTO
Public Property FullName() As String
' Other properties...
End Class
' Mapping Configuration
Private config = New MapperConfiguration(Sub(cfg)
cfg.CreateMap(Of Order, OrderDTO)().ForMember(Function(dest) dest.FullName, Function(opt) opt.MapFrom(Function(src) src.OrderedBy.FirstName & " " & src.OrderedBy.LastName))
End Sub)
Private mapper As IMapper = config.CreateMapper()
Private order As New Order With {
.OrderedBy = New User With {
.FirstName = "Jane",
.LastName = "Doe"
}
}
Private orderDto As OrderDTO = mapper.Map(Of OrderDTO)(order)
- 此範例展示了從一個包含巢狀
OrderedBy詳細資訊的Order物件映射到一個平坦的OrderDTO,提取並組合使用者名稱到一個FullName屬性中。
在版本 9.0 中,AutoMapper 已經從靜態 API (Mapper.Initialize) 過渡到基於實例的 API。 這一變化增強了靈活性,並且更適合現代應用特別是那些使用依賴注入的應用。 如果您使用的是早於 9.0 的版本,那麼靜態 API 方式是適用的。 然而,對於較新的版本,建議採用上面範例中概述的基於實例的 API。
Iron Software 套件總覽
Iron Software Suite for .NET 是一個強大的包,其中包含一系列的程式庫,每個都用於特定目的。 它涵蓋了建立、閱讀和編輯 PDFs,將 HTML 轉換為 PDF,並將圖像中的文字轉換為多種語言的功能。 這套工具滿足各種開發需求,使其成為任何 C# 專案的多功能補充。
Iron Software 套件的關鍵組件
-
IronPDF for PDF Management:此組件允許開發人員建立、閱讀、編輯和簽署 PDFs。 它還提供將 HTML 轉換為 PDF 的功能,這在從基於網頁資料生成報告或文件時特別有用。

-
IronXL Excel File Handling:IronXL 便利地在不需要 Office Interop 的情況下處理 Excel 文件,簡化資料操作和分析任務。

-
IronOCR for Text Extraction:它能夠從圖像中提取文字,支持多達 125 種語言,因此在國際項目中具有高度的靈活性。

- IronBarcode for QR and Barcode Support:一個允許讀寫 QR 碼和條碼的程式庫,增強了庫存管理、跟踪和其他相關任務的功能。

與 Automapper 的互補性
雖然 Automapper 在屬性之間的映射上表現出色,Iron Software 的程式庫通過提供處理各種不同資料格式和型別的工具擴展了其功能。 例如,使用 Automapper 將使用者領域物件轉換為 DTO 之後,IronPDF 可以用於生成 PDF 格式的綜合報告。 同樣,通過 Automapper 提取或轉換的資料可以使用 IronXL 進行 Excel 文件操作的進一步處理或分析。
結論
Automapper 是 C# 開發人員的寶貴工具,簡化了物件之間的映射任務。 在屬性映射、處理複雜物件模型和提供可自訂映射配置方面,其強大功能使其成為高效軟體開發的必備工具。 了解物件模型的複雜性以及如何配置 Automapper 以適合特定需求,對於在任何專案中最大化其潛力至關重要。
Iron Software 的 Iron Suite 提供各種授權選擇,包括Iron Software 免費試用,以滿足不同專案需求。 其授權分為 Lite、Plus 和 Professional 級別,適合不同的團隊規模,並提供綜合支援功能。 將此套件與 Automapper 結合可以大大增強 C# 專案的功能,增加資料處理和文件操作能力。
常見問題
如何在C#中高效地映射不同物件型別之間的屬性?
您可以在C#中使用Automapper來自動化不同物件型別之間屬性的映射。通過定義配置,您可以指定來源物件屬性如何映射到目標物件,從而減少手動編碼並最大限度地減少錯誤。
在C#中使用Automapper處理巢狀物件的過程是什麼?
Automapper可以展平複雜的物件模型,允許您將巢狀屬性映射到扁平的目標結構。這一功能對於將巢狀物件轉換為簡化的資料傳輸物件(DTOs)特別有用。
如何在C#中將物件映射與PDF和Excel文件處理整合?
在使用Automapper映射物件屬性後,您可以整合Iron Software的程式庫如IronPDF和IronXL來生成報告或操作PDF和Excel格式的資料,增強您C#專案的資料處理能力。
在現代應用程式中使用Automapper與依賴注入有什麼優點?
在9.0版本中,Automapper過渡到基於實例的API,這增強了使用依賴注入的現代應用程式的靈活性和相容性,允許更動態和可擴展的映射配置。
Automapper可以處理不同物件模型的映射,例如DTOs和域物件嗎?
是的,Automapper專為處理各種物件模型之間的映射而設計,包括使用者域物件和資料傳輸物件(DTOs),為C#應用程式中不同的資料傳輸需求提供多樣性。
在C#專案中如何開始使用Automapper?
要在C#專案中開始使用Automapper,通過套件管理器控制檯使用命令Install-Package AutoMapper進行安裝。然後,定義映射配置以自動化物件模型之間的映射過程。




