ASP.NET Core中AutoMapper用法
AutoMapper是什么?
AutoMapper 是一个对象-对象映射器,可以将一个对象映射到另一个对象。
官网地址:http://automapper.org/
官方文档:https://docs.automapper.org/en/latest/
一、配置Profile文件
新建一个类继承Profile
//后期的映射操作配置在这里
public class DemoProfile : Profile
{
public DemoProfile()
{
CreateMap<Member,MemberDto>().ReverseMap();//Member数据映射到MemberDto
}
}
写法一:
Program.cs中注册程序集,Application层中定义Profile配置文件,无需其他注册,无需Autofac,需要用的地方直接注入IMapper即可。
Program.cs中注册:
//写法一
builder.Services.AddAutoMapper(Assembly.Load("Application"), Assembly.Load("Domain"));
写法二
主要是注册方式有变化 :
//写法二
builder.Services.AddAutoMapper(cfg => {
cfg.AddProfile<DemoProfile>();
});
这种方式可以添加多个配置文件
写法三
先创建MapperConfiguration类的实例,然后通过容器手动注册,如果应用程序已经集成了Autofac,可以不用再注册IMapper,否则需要手动注册IMapper;
//写法三
AutoMapper.IConfigurationProvider config = new MapperConfiguration(cfg =>
{
cfg.AddProfile<DemoProfile>();
});
builder.Services.AddSingleton(config);
//如果已经集成Autofac,则不需此行
builder.Services.AddScoped<IMapper, Mapper>();
这种方式可以配置其他配置项,如源类型和目标类型 蛇形命名法 和 驼峰命名法的映射配置等。
注入IMapper使用:
public class DefaultController : Controller
{
private readonly IMapper mapper;
public DefaultController(IMapper mapper)
{
this.mapper = mapper;
}
public IActionResult Index()
{
Member member = new Member {
Age = 1,
Birthday = DateTime.Now,
MemberId = 10,
MemberName = "张三"
};
MemberDto memberDto = mapper.Map<MemberDto>(member);
return View();
}
}
其他
一些高级特性,自定义配置等。