问题描述
我们知道,AutoMapper是.NET开发框架中的一个很好用的实体类映射工具,它可实现实体之间的相互映射,只需要我们安装并配置好AutoMapper即可,在ASP.NET Core中同样可以使用AutoMapper来处理实体类间的映射,那么,在ASP.NET Core中如何安装、配置及使用AutoMapper呢?
本文分享一些常用的使用方式即处理技巧。
方案一
- 通过
Nuget
包管理工具在项目中安装AutoMapper
工具包; - 通过
Nuget
包管理工具在项目中安装AutoMapper
的依赖注入包; - 在
Startup.cs
文件中调用AutoMapper
的AddAutoMapper()
的静态扩展方法,如下:
public void ConfigureServices(IServiceCollection services) {
services.AddMvc(); // 添加 MVC 服务.
services.AddAutoMapper(); // <-- 调用AutoMapper的AddAutoMapper() 静态扩展方法.
//services.AddAutoMapper(typeof(Startup)); // <-- 新版本的AutoMapper请使用这种方式添加服务
- 创建一个映射类文件,继承至
Profile
基类,如:
public class MappingProfile : Profile {
public MappingProfile() {
//此文件中添加所有的实体到实体间的映射
CreateMap<User, UserDto>();
CreateMap<UserDto, User>();
}
}
- 在ASP.NET Core MVC程序的控制器中使用,如:
public class UserController : Controller {
// 创建一个私有的映射类对象
private readonly IMapper _mapper;
//使用构造器注入AutoMapper的实体对象
public UserController(IMapper mapper) {
_mapper = mapper;
}
public async Task<IActionResult> Edit(string id) {
// 根据自己的需求查询数据
var user = await _context.Users
.SingleOrDefaultAsync(u => u.Id == id);
//使用AutoMapper实现实体之间的映射转换,此处为: User =>> UserDto
var model = _mapper.Map<User, UserDto>(user);
// 其他的代码处理
}
}
方案二
在 AutoMapper 6.1.1
以及 ASP.NET Core 1.1.2
中,完成使用反射来处理实体间的映射注册工作:
public class UserProfile : Profile, IProfile
{
public UserProfile()
{
CreateMap<User, UserModel>();
CreateMap<UserModel, User>();
}
}
//使用反射来注册映射关系
public class Mappings
{
public static void RegisterMappings()
{
var all =
Assembly
.GetEntryAssembly()
.GetReferencedAssemblies()
.Select(Assembly.Load)
.SelectMany(x => x.DefinedTypes)
.Where(type => typeof(IProfile).GetTypeInfo().IsAssignableFrom(type.AsType()));
foreach (var ti in all)
{
var t = ti.AsType();
if (t.Equals(typeof(IProfile)))
{
Mapper.Initialize(cfg =>
{
cfg.AddProfiles(t); // 初始化每个实体映射
});
}
}
}
}
调用方法,在 ASP.NET Core MVC 项目中的 Startup.cs
文件中,使用如下的调用来注册:
Mappings.RegisterMappings();
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册