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#操作DataTable的实现步骤

    C#操作DataTable的实现步骤

    本文主要介绍了C#操作DataTable的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • C#实现鼠标裁剪图像功能

    C#实现鼠标裁剪图像功能

    这篇文章主要为大家详细介绍了C#实现鼠标裁剪图像功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • c#多进程通讯的实现示例

    c#多进程通讯的实现示例

    本文主要介绍了c#多进程通讯的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 不安装excel使用c#创建excel文件

    不安装excel使用c#创建excel文件

    这篇文章主要介绍了使用c#创建excel的示例,刚时给出了不安装excel也可创建excel的方法,需要的朋友可以参考下
    2014-02-02
  • C#通过GET/POST方式发送Http请求

    C#通过GET/POST方式发送Http请求

    本文主要介绍了C#实现http请求的两种方式,get和post方式。文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • C#+RedisSearch实现高性能全文搜索

    C#+RedisSearch实现高性能全文搜索

    Redis Search是一个Redis模块,它使用压缩的倒排索引来实现快速的索引和低内存占用,本文主要介绍了C#如何使用RedisSearch实现高性能全文搜索,希望对大家有所帮助
    2023-07-07
  • C#高效反射调用方法类实例详解

    C#高效反射调用方法类实例详解

    在本篇文章中小编给大家分享的是关于C#高效反射调用方法类的相关实例内容,有兴趣的朋友们学习下。
    2019-07-07
  • C#数据结构之最小堆的实现方法

    C#数据结构之最小堆的实现方法

    这篇文章主要给大家介绍了关于C#数据结构之最小堆的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • C#通过实现winmm枚举音频设备

    C#通过实现winmm枚举音频设备

    使用C#做音频录制时需要获取音频设备信息,其中比较简单的就是使用winmm,所以本文就为大家介绍一下C#如何通过实现winmm枚举音频设备,需要的可以参考下
    2023-10-10
  • c#索引器详解示例

    c#索引器详解示例

    索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写。
    2014-04-04

最新评论