ASP.NET Core 使用 AutoMapper 组件可以更加便捷地进行对象之间的转换,下面是使用步骤和示例说明。
步骤
1. 安装 AutoMapper 组件
在 ASP.NET Core 项目的 NuGet 包管理器中搜索 AutoMapper 组件,并安装。
2. 创建映射配置文件
在项目中新建一个 MappingProfile.cs
文件,并编写映射配置。
using AutoMapper;
using MyProject.Models;
using MyProject.ViewModels;
namespace MyProject.MappingProfiles {
public class MappingProfile : Profile {
public MappingProfile() {
// 定义映射关系
CreateMap<User, UserViewModel>();
}
}
}
上述代码中,CreateMap()
方法定义了 User
类型和 UserViewModel
类型之间的映射关系。
3. 注册 AutoMapper 组件
在 ASP.NET Core 项目的 Startup.cs
文件中进行 AutoMapper 配置。
using AutoMapper;
using MyProject.MappingProfiles;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddAutoMapper(typeof(MappingProfile));
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 配置中间件
}
}
在 ConfigureServices() 方法中使用 AddAutoMapper()
注册映射配置文件。
4. 进行对象转换
在需要进行对象转换的地方注入 IMapper 接口,调用 Mapper.Map()
方法即可进行转换。
using AutoMapper;
using MyProject.Models;
using MyProject.ViewModels;
public class UserController : Controller {
private readonly IMapper _mapper;
public UserController(IMapper mapper) {
_mapper = mapper;
}
public IActionResult Index() {
var user = new User { Id = 1, Name = "Tom", Age = 18 };
var viewModel = _mapper.Map<UserViewModel>(user);
return View(viewModel);
}
}
上述代码中,_mapper.Map()
方法将 User
对象转换为 UserViewModel
对象,并返回给视图进行展示。
示例说明
示例一
在实际开发中,经常需要将领域对象(Domain Objects)转换为视图模型(View Models),比如把用户对象转换为用户视图模型,示例代码如下:
using System;
namespace MyProject.Models
{
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
}
namespace MyProject.ViewModels
{
public class UserViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public string AgeText { get; set; }
}
}
using AutoMapper;
using MyProject.Models;
using MyProject.ViewModels;
namespace MyProject.MappingProfiles {
public class MappingProfile : Profile {
public MappingProfile() {
CreateMap<User, UserViewModel>()
.ForMember(dest => dest.AgeText, opt => opt.MapFrom(src => src.Age + " years old"));
}
}
}
using AutoMapper;
using MyProject.Models;
using MyProject.ViewModels;
public class UserController : Controller {
private readonly IMapper _mapper;
public UserController(IMapper mapper) {
_mapper = mapper;
}
public IActionResult Index() {
var user = new User { Id = 1, Name = "Tom", Age = 18 };
var viewModel = _mapper.Map<UserViewModel>(user);
return View(viewModel);
}
}
上述代码中,CreateMap()
方法定义了 User
类型和 UserViewModel
类型之间的映射关系,并将 Age
属性转换成了字符串类型的 AgeText
属性,用于在视图中展示用户年龄信息。
示例二
在实际开发中,也经常需要根据一些规则判断是否进行对象之间的转换,比如只有在年龄大于 18 年的用户才需要转换为用户视图模型,示例代码如下:
using System;
namespace MyProject.Models
{
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
}
namespace MyProject.ViewModels
{
public class UserViewModel
{
public int Id { get; set; }
public string Name { get; set; }
}
}
using AutoMapper;
using MyProject.Models;
using MyProject.ViewModels;
namespace MyProject.MappingProfiles {
public class MappingProfile : Profile {
public MappingProfile() {
CreateMap<User, UserViewModel>()
.ForMember(dest => dest.AgeText, opt => opt.MapFrom(src => src.Age + " years old"))
.ForAllOtherMembers(opt => opt.Condition((src, dest, srcMember) => src.Age > 18));
}
}
}
using AutoMapper;
using MyProject.Models;
using MyProject.ViewModels;
public class UserController : Controller {
private readonly IMapper _mapper;
public UserController(IMapper mapper) {
_mapper = mapper;
}
public IActionResult Index() {
var user = new User { Id = 1, Name = "Tom", Age = 20 };
var viewModel = _mapper.Map<UserViewModel>(user);
return View(viewModel);
}
}
上述代码中,.ForAllOtherMembers()
方法定义了只有年龄大于 18 的用户才需要进行转换。
以上就是 ASP.NET Core 使用 AutoMapper 的完整攻略,包含了步骤以及两条示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core使用AutoMapper组件 - Python技术站