Automapper C#(開發者的工作原理)
Automapper 是 C# 中的一個多功能且功能強大的函式庫,設計用來促進物件對物件的映射,讓複雜的物件模型之間的資料傳輸變得更容易且更易於維護。 在這篇文章中,我們將探討 Automapper 如何有效地映射屬性、扁平化複雜的物件模型,以及處理各種類型的物件,例如使用者領域物件和資料傳輸物件。
Automapper 簡介
Automapper in C# 是一種物件對物件的映射器,是一種簡化在不同物件類型之間轉換和傳輸資料的工具。這在涉及資料實體及其轉換為資料傳輸物件 (DTO) 的情境中特別有用。
Automapper 的主要功能
- 簡化程式碼:Automapper 透過自動化的屬性對應,大幅減少手動編碼的需求,從而避免錯誤並節省時間。
- 映射組態的彈性:Automapper 允許對映射配置進行詳細的客製化,以適應廣泛的映射情境。
- 效能效率:本函式庫設計用來處理大型且複雜的物件模型,而不會造成顯著的效能開銷。
開始使用 Automapper
若要使用 Automapper,必須先透過套件管理員控制台安裝,套件管理員控制台是開發環境的一個元件,可方便管理軟體套件。
透過套件管理員控制台安裝
您只需在套件管理員控制台執行簡單的指令,即可輕鬆地在專案中安裝 Automapper:
Install-Package AutoMapper
設定基本映射組態
使用 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的實例。
Advanced Mapping Techniques with 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之間的對應,其中UserDTO中的FullName是User中FirstName和LastName的串接。
範例 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 Suite 概觀。
Iron Software Suite for .NET 是一個功能強大的套件,包含一系列函式庫,每個函式庫都有特定的用途。 它涵蓋的功能包括建立、閱讀和編輯 PDF、將 HTML 轉換為 PDF,以及將影像處理為多國語言的文字。 本套件可滿足各種開發需求,使其成為任何 C# 專案的多功能補充。
Iron Software Suite 的主要組成部分
1.IronPDF for PDF Management:此元件可讓開發人員建立、閱讀、編輯和簽署 PDF。 它還提供將 HTML 轉換為 PDF 的功能,這項功能在從網頁資料產生報告或文件時特別有用。
2.IronXL Excel 檔案處理: IronXL 可在不需要 Office Interop 的情況下輕鬆處理 Excel 檔案,簡化資料處理和分析工作。
。3.IronOCR for Text Extraction:它可以從影像中萃取文字,支援多達 125 種語言,因此在國際專案中具有高度的通用性。
。4.支援 QR 與條碼的 IronBarcode:可讀取、寫入 QR 碼與 BarCode 的函式庫,可增強庫存管理、追蹤及其他相關工作的能力。
。
與 Automapper 的互補性
Automapper 擅長於在 C# 中的不同物件模型之間進行屬性對應,而 Iron Software 的函式庫則透過提供處理各種資料格式和類型的工具來擴充功能。例如,在使用 Automapper 將使用者領域物件轉換為 DTO 之後,就可以使用 IronPDF 來產生 PDF 格式的綜合報表。 同樣地,使用 Automapper 擷取或轉換的資料也可以使用 IronXL.Excel 檔案作進一步的操作或分析。
結論
Automapper是 C# 開發人員的寶貴工具,可簡化物件之間的對應任務。 它在映射屬性、處理複雜物件模型以及提供自訂映射配置方面的強大功能,使其成為高效軟體開發的必要工具。 瞭解物件模型的複雜性,以及如何設定 Automapper 以符合特定需求,對於在任何專案中發揮其最大潛力至關重要。
Iron Software 的 Iron Suite 提供多種授權選項,包括 免費試用 Iron Software ,以符合不同專案的需求。 其 License 分為 Lite、Plus 和 Professional 三種等級,可滿足不同團隊規模的需求,並提供全面的支援功能。 將此套件與 Automapper 整合,可大幅提升 C# 專案,增加資料處理與文件操作功能。
常見問題解答
如何在 C# 中有效地對應不同物件類型之間的屬性?
您可以使用 C# 中的 Automapper 來自動化不同物件類型之間的屬性對應。透過定義組態,您可以指定來源物件屬性如何對應至目的地物件,減少手動編碼並將錯誤減至最低。
在 C# 中使用 Automapper 處理嵌套物件的流程為何?
Automapper 可以將複雜的物件模型扁平化,讓您可以將嵌套的屬性對應到扁平的目標結構。此功能對於將巢狀物件轉換為簡化的資料傳輸物件 (DTO) 尤其有用。
如何在 C# 中整合物件對應與 PDF 和 Excel 檔案處理?
使用 Automapper 映射物件屬性後,您可以整合 Iron Software 的 IronPdf 和 IronXL 等函式庫,以 PDF 和 Excel 格式產生報表或處理資料,強化 C# 專案的資料處理能力。
在現代應用程式中使用具備依賴注入功能的 Automapper 有哪些優點?
在 9.0 版中,Automapper 轉換為基於實例的 API,增強了與使用依賴注入的現代應用程式的靈活性和相容性,允許更多動態和可擴展的映射配置。
Automapper 是否可以處理不同物件模型的對應,例如 DTO 與網域物件?
是的,Automapper 旨在處理各種物件模型之間的映射,包括使用者領域物件和資料傳輸物件 (DTO),為 C# 應用程式中的不同資料傳輸需求提供多功能性。
在 C# 專案中開始使用 Automapper 的步驟為何?
若要開始在 C# 專案中使用 Automapper,請使用下列指令透過套件管理員控制台安裝:Install-Package AutoMapper。然後,定義對應配置,以自動執行物件模型之間的對應程序。







