在C#中,AutoMapper 是一个功能强大的对象-对象映射器,它能够在不同类型的对象之间自动进行属性值的复制。这在层与层之间的数据传输对象(DTOs)和实体(Entities)之间的转换中特别有用。以下是如何在 C# 中使用 AutoMapper 进行对象映射的基本步骤:
1. 安装 AutoMapper
首先,需要通过 NuGet 包管理器安装 AutoMapper。在 Visual Studio 的“包管理器控制台”中,可以运行以下命令:
Install-Package AutoMapper
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection
第一个包是 AutoMapper 的核心库,第二个包是用于将 AutoMapper 集成到 ASP.NET Core 依赖注入系统中的扩展。
2. 创建源对象和目标对象
假设有一个简单的源对象(比如 UserEntity
)和一个目标对象(比如 UserDto
)。
public class UserEntity
{public int Id { get; set; }public string Name { get; set; }public string Email { get; set; }
}public class UserDto
{public int Id { get; set; }public string DisplayName { get; set; }public string MailAddress { get; set; }
}
3. 创建映射配置
接下来,需要创建一个映射配置类,在这个类中定义源对象到目标对象的映射规则。
public class MappingProfile : Profile
{public MappingProfile(){CreateMap<UserEntity, UserDto>().ForMember(dest => dest.DisplayName, opt => opt.MapFrom(src => src.Name)).ForMember(dest => dest.MailAddress, opt => opt.MapFrom(src => src.Email));}
}
4. 配置依赖注入
在 ASP.NET Core 应用中,需要在 Startup.cs
文件中的 ConfigureServices
方法中配置 AutoMapper 的依赖注入。
public void ConfigureServices(IServiceCollection services)
{// 其他服务配置...services.AddAutoMapper(typeof(Startup)); // 或者 typeof(MappingProfile) 取决于配置类位置
}
如果使用的是 .NET 6 或更高版本,并且使用的是最小 API 配置,可能需要在 Program.cs
文件中配置 AutoMapper。
var builder = WebApplication.CreateBuilder(args);// 其他服务配置...builder.Services.AddAutoMapper(typeof(Program)); // 或者映射配置类var app = builder.Build();// 配置中间件...
5. 使用 AutoMapper 进行映射
现在,可以在服务或控制器中使用 AutoMapper 的 IMapper
接口来进行对象映射。
public class UserService
{private readonly IMapper _mapper;public UserService(IMapper mapper){_mapper = mapper;}public UserDto ConvertToDto(UserEntity userEntity){return _mapper.Map<UserDto>(userEntity);}
}
在控制器中,可以通过构造函数注入 IMapper
或使用 ASP.NET Core 的依赖注入特性(如 [FromServices]
属性)来获取 IMapper
实例。
[ApiController]
[Route("[controller]")]
public class UserController : ControllerBase
{private readonly UserService _userService;private readonly IMapper _mapper;public UserController(UserService userService, IMapper mapper){_userService = userService;_mapper = mapper;}[HttpGet("{id}")]public IActionResult GetUser(int id){// 假设有一个方法来获取 UserEntityUserEntity userEntity = GetUserEntityById(id); // 这是一个假设的方法UserDto userDto = _mapper.Map<UserDto>(userEntity);// 或者使用 _userService.ConvertToDto(userEntity);return Ok(userDto);}// 假设的获取 UserEntity 的方法private UserEntity GetUserEntityById(int id){// 这里应该是从数据库或其他数据源获取 UserEntity 的逻辑return new UserEntity { Id = id, Name = "John Doe", Email = "john.doe@example.com" };}
}
通过以上步骤,我们就可以在 C# 中使用 AutoMapper 进行对象映射了。AutoMapper 极大地简化了对象之间的转换工作。