shou ye

.NET5.0 MVC AutoMapper 基本使用

安装

安装 NuGet 包

install-package AutoMapper
install-package AutoMapper.Extensions.Microsoft.DependencyInjection

第一个是 AutoMapper 的包。

第二个是扩展包,可以使用 AddAutoMapper() 方法


使用

前置

这里创建两个示例,以用于相互映射。

public class User
{
    public int ID { get; set; }
    public string Name { get; set; }
}
public class UserDto
{
    public int ID { get; set; }
    public string Name { get; set; }
}

配置

创建一个 MapperProfile 类,继承 AutoMapper.Profile ,接着在其构造函数中创建映射。

//创建一个 自定义Profile 类,继承 AutoMapper.Profile
public class MapperProfile : Profile
{
    public MapperProfile()
    {
        //配置映射(基本)
        CreateMap<User, UserDto>();
        //配置映射:这样映射的结果 dto.Name = user.ID + user.Name
        CreateMap<User, UserDto>()
            .ForMember(dest => dest.Name, opt => MapFrom(src => str.ID.ToString() + src.Name));
        //其他配置:驼峰命名与Pascal命名的兼容
        DestinationMemberNamingConvention = new PascalCaseNamingConvention();
        SourceMemberNamingConvention = new LowerUnderscoreNamingConvention();
    }
}

Startup.cs 中注册服务。

public void ConfigureServices(IServiceCollection services)
{
    services.AddAutoMapper(typeof(MapperProfile));
    //……其他代码
}

注意 :上述写法,实际上是找到 MapperProfile 所在程序集,然后扫描程序集所有继承 Profile 的 class(若同一个程序集多次出现,会重复配置。重复配置目前未发现对映射有影响)。


使用

在控制器中使用。

public class HomeController : Controller
{
    private readonly IMapper _mapper;
    
    public HomeController(IMapper mapper)
    {
        _mapper = mapper;
    }
    
    [HttpGet]
    public UserDto GetUser()
    {
        User user = new User(){ ID = 1, Name = "名字" };
        var dto = _mapper.Map<User,UserDto>(user);
        return dto;
    }
}

参考来源

ASP.NET.Core中使用AutoMapper

posted @   芦荟柚子茶  阅读(506)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
ye jiao
点击右上角即可分享
微信分享提示