C#使用AutoMapper实现类映射详解

 更新时间:2024年01月26日 08:33:34   作者:rjcql  
AutoMapper是一个用于.NET中简化类之间的映射的扩展库,这篇文章主要介绍了C#如何使用AutoMapper实现类映射,感兴趣的小伙伴可以跟随小编一起学习一下

写在前面

AutoMapper是一个用于.NET中简化类之间的映射的扩展库;可以在执行对象映射的过程,省去的繁琐转换代码,实现了对DTO的快速装配,有效的减少了代码量。

通过NuGet安装,AutoMapper, 由于本例用到了DI,所以需要顺便安装一下 AutoMapper.Extensions.Microsoft.DependencyInjection

代码实现

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;
}

调用示例

到此这篇关于C#使用AutoMapper实现类映射详解的文章就介绍到这了,更多相关C# AutoMapper类映射内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#环形队列的实现方法详解

    C#环形队列的实现方法详解

    这篇文章先是简单的给大家介绍了什么是环形队列和环形队列的优点,然后通过实例代码给大家介绍C#如何实现环形队列,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-09-09
  • C#入门之结构类型Struct

    C#入门之结构类型Struct

    这篇文章介绍了C#入门之结构类型Struct,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C#固定大小缓冲区及使用指针复制数据详解

    C#固定大小缓冲区及使用指针复制数据详解

    这篇文章主要为大家介绍了C#固定大小缓冲区及使用指针复制数据详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 基于WPF实现元旦祝福动画效果

    基于WPF实现元旦祝福动画效果

    本文介绍了如何在WPF中设计并实现一个元旦祝福动画,包括节日主题色彩、核心动画元素、交互体验等,通过XAML和C#代码,展示了如何使用WPF动画系统、3D图形和视觉效果,实现渐变显示、雪花飘落、烟花绽放等动画效果,感兴趣的小伙伴可以动手尝试一下
    2026-01-01
  • WPF实现树形表格控件的示例代码

    WPF实现树形表格控件的示例代码

    这篇文章主要介绍了如何利用WPF框架实现树形表格控件,该控件不仅能够有效地展示复杂的层级数据,还能够提供丰富的个性化定制选项,感兴趣的可以了解下
    2024-04-04
  • Winform应用程序如何使用自定义的鼠标图片

    Winform应用程序如何使用自定义的鼠标图片

    这篇文章主要介绍了Winform应用程序如何使用自定义的鼠标图片,在window系统中,自带的鼠标外观可能看起来比较小,因此我们需要使用自己的鼠标图片外观
    2020-11-11
  • C#通过Python.NET调用Python pyd扩展模块的实践指南

    C#通过Python.NET调用Python pyd扩展模块的实践指南

    在工业软件与算法融合的场景中,经常需要将 Python 生态的高性能算法库集成到 C# 桌面或后端应用中,下面我们就来看看在C#应用中调用Python编译模块(pyd)有哪些技术方案吧
    2026-05-05
  • C# 时间和日期的处理方法

    C# 时间和日期的处理方法

    这篇文章主要介绍了C#时间和日期的处理,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-06-06
  • c#用Treeview实现FolderBrowerDialog 和动态获取系统图标(运用了Win32 dll类库)

    c#用Treeview实现FolderBrowerDialog 和动态获取系统图标(运用了Win32 

    其实,FolderBrowerDialog 很好用呢,有木有啊亲,反正我特别的喜欢,微软大哥把这个浏览文件夹的东东封装的多好呀
    2013-03-03
  • DevExpress实现禁用TreeListNode CheckBox的方法

    DevExpress实现禁用TreeListNode CheckBox的方法

    这篇文章主要介绍了DevExpress实现禁用TreeListNode CheckBox的方法,在项目开发中有应用价值,需要的朋友可以参考下
    2014-08-08

最新评论