C#使用AutoMapper實(shí)現(xiàn)類(lèi)映射詳解
寫(xiě)在前面
AutoMapper是一個(gè)用于.NET中簡(jiǎn)化類(lèi)之間的映射的擴(kuò)展庫(kù);可以在執(zhí)行對(duì)象映射的過(guò)程,省去的繁瑣轉(zhuǎn)換代碼,實(shí)現(xiàn)了對(duì)DTO的快速裝配,有效的減少了代碼量。
通過(guò)NuGet安裝,AutoMapper, 由于本例用到了DI,所以需要順便安裝一下 AutoMapper.Extensions.Microsoft.DependencyInjection

代碼實(shí)現(xiàn)
using AutoMapper;
using AutoMapper.Internal;
using Microsoft.Extensions.DependencyInjection;
IServiceCollection services = new ServiceCollection();
services.AddTransient<ISomeService>(sp => new FooService(5));
services.AddAutoMapper(typeof(Source));
var provider = services.BuildServiceProvider();
using (var scope = provider.CreateScope())
{
var mapper = scope.ServiceProvider.GetRequiredService<IMapper>();
foreach (var typeMap in mapper.ConfigurationProvider.Internal().GetAllTypeMaps())
{
Console.WriteLine($"{typeMap.SourceType.Name} -> {typeMap.DestinationType.Name}");
}
foreach (var service in services)
{
Console.WriteLine(service.ServiceType + " - " + service.ImplementationType);
}
var dest = mapper.Map<Dest2>(new Source2());
Console.WriteLine(dest!.ResolvedValue);
}
Console.ReadKey();
public class Source
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Dest
{
public int ResolvedValue { get; set; }
}
public class Source2
{
public string Name { get; set; }
public int ResolvedValue { get; set; }
}
public class Dest2
{
public int ResolvedValue { get; set; }
}
/// <summary>
/// 映射表1
/// </summary>
public class Profile1 : Profile
{
public Profile1()
{
CreateMap<Source, Dest>();
}
}
/// <summary>
/// 映射表1
/// </summary>
public class Profile2 : Profile
{
public Profile2()
{
CreateMap<Source2, Dest2>()
.ForMember(d => d.ResolvedValue, opt => opt.MapFrom<DependencyResolver>());
}
}
public class DependencyResolver : IValueResolver<object, object, int>
{
private readonly ISomeService _service;
public DependencyResolver(ISomeService service)
{
_service = service;
}
public int Resolve(object source, object destination, int destMember, ResolutionContext context)
{
return _service.Modify(destMember);
}
}
public interface ISomeService
{
int Modify(int value);
}
public class FooService : ISomeService
{
private readonly int _value;
public FooService(int value)
{
_value = value;
}
public int Modify(int value) => value + _value;
}調(diào)用示例

到此這篇關(guān)于C#使用AutoMapper實(shí)現(xiàn)類(lèi)映射詳解的文章就介紹到這了,更多相關(guān)C# AutoMapper類(lèi)映射內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#環(huán)形隊(duì)列的實(shí)現(xiàn)方法詳解
這篇文章先是簡(jiǎn)單的給大家介紹了什么是環(huán)形隊(duì)列和環(huán)形隊(duì)列的優(yōu)點(diǎn),然后通過(guò)實(shí)例代碼給大家介紹C#如何實(shí)現(xiàn)環(huán)形隊(duì)列,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-09-09
C#入門(mén)之結(jié)構(gòu)類(lèi)型Struct
這篇文章介紹了C#入門(mén)之結(jié)構(gòu)類(lèi)型Struct,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
C#固定大小緩沖區(qū)及使用指針復(fù)制數(shù)據(jù)詳解
這篇文章主要為大家介紹了C#固定大小緩沖區(qū)及使用指針復(fù)制數(shù)據(jù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
基于WPF實(shí)現(xiàn)元旦祝福動(dòng)畫(huà)效果
本文介紹了如何在WPF中設(shè)計(jì)并實(shí)現(xiàn)一個(gè)元旦祝福動(dòng)畫(huà),包括節(jié)日主題色彩、核心動(dòng)畫(huà)元素、交互體驗(yàn)等,通過(guò)XAML和C#代碼,展示了如何使用WPF動(dòng)畫(huà)系統(tǒng)、3D圖形和視覺(jué)效果,實(shí)現(xiàn)漸變顯示、雪花飄落、煙花綻放等動(dòng)畫(huà)效果,感興趣的小伙伴可以動(dòng)手嘗試一下2026-01-01
WPF實(shí)現(xiàn)樹(shù)形表格控件的示例代碼
這篇文章主要介紹了如何利用WPF框架實(shí)現(xiàn)樹(shù)形表格控件,該控件不僅能夠有效地展示復(fù)雜的層級(jí)數(shù)據(jù),還能夠提供豐富的個(gè)性化定制選項(xiàng),感興趣的可以了解下2024-04-04
Winform應(yīng)用程序如何使用自定義的鼠標(biāo)圖片
這篇文章主要介紹了Winform應(yīng)用程序如何使用自定義的鼠標(biāo)圖片,在window系統(tǒng)中,自帶的鼠標(biāo)外觀(guān)可能看起來(lái)比較小,因此我們需要使用自己的鼠標(biāo)圖片外觀(guān)2020-11-11
C#通過(guò)Python.NET調(diào)用Python?pyd擴(kuò)展模塊的實(shí)踐指南
在工業(yè)軟件與算法融合的場(chǎng)景中,經(jīng)常需要將 Python 生態(tài)的高性能算法庫(kù)集成到 C# 桌面或后端應(yīng)用中,下面我們就來(lái)看看在C#應(yīng)用中調(diào)用Python編譯模塊(pyd)有哪些技術(shù)方案吧2026-05-05
c#用Treeview實(shí)現(xiàn)FolderBrowerDialog 和動(dòng)態(tài)獲取系統(tǒng)圖標(biāo)(運(yùn)用了Win32 
其實(shí),FolderBrowerDialog 很好用呢,有木有啊親,反正我特別的喜歡,微軟大哥把這個(gè)瀏覽文件夾的東東封裝的多好呀2013-03-03
DevExpress實(shí)現(xiàn)禁用TreeListNode CheckBox的方法
這篇文章主要介紹了DevExpress實(shí)現(xiàn)禁用TreeListNode CheckBox的方法,在項(xiàng)目開(kāi)發(fā)中有應(yīng)用價(jià)值,需要的朋友可以參考下2014-08-08

