AutoMapper多个源映射到一个Dto
AutoMapper多个源映射到一个Dto
首先要引入AutoMapper(我电脑用的8.0,9.0版本)
1. 定义源映射对象
Model如下:
实体Social
/// <summary>
/// 社会属性
/// </summary>
public class Social
{
public int Age { get; set; }
public bool IsMarried { get; set; }
public string Name { get; set; }
}
实体Physical
/// <summary>
/// 身体属性
/// </summary>
public class Physical
{
public string Eye { get; set; }
public string Mouth { get; set; }
}
PeopleDto
public class PeopleDto
{
public string Eye { get; set; }
public string Mouth { get; set; }
public string Ear { get; set; }
public int Age { get; set; }
public bool IsMarried { get; set; }
}
2. 映射配置
public class AutoMapperProfile : Profile
{
/// <summary>
/// 构造函数
/// </summary>
public AutoMapperProfile()
{
CreateMap<SocialAttribute, PeopleDto>()
.ForMember(m => m.Age, n => n.MapFrom(s => s.Age))
.ForMember(m => m.IsMarried, n => n.MapFrom(s => s.IsMarried));
CreateMap<PhysicalAttribute, PeopleDto>()
.ForMember(m => m.Eye, n => n.MapFrom(s => s.Eye))
.ForMember(m => m.Mouth, n => n.MapFrom(s => s.Mouth));
}
}
3. 控制台的原生注入
static void Main(string[] args)
{
AutoMapper.IConfigurationProvider config = new MapperConfiguration(cfg =>
{
cfg.AddProfile<AutoMapperProfile>();
});
//DI容器
var root = new ServiceCollection()
.AddSingleton(config)
.AddSingleton<IMapper, Mapper>()
.BuildServiceProvider();
//容器1
var provider1 = root.CreateScope().ServiceProvider;
var serviceMapper = provider1.GetService<IMapper>();
//PeopleDto result = new PeopleDto() { Eye = "双眼皮", Mouth = "红润", Age = 18, IsMarried = false };目标
Physical physical = new Physical() { Eye = "很大很好看", Mouth = "法国兰蔻" };
Social social = new Social() { Name = "测试name", IsMarried = true, Age = 18 };
PeopleDto peopleDto = new PeopleDto();
PeopleDto output = serviceMapper.Map(social, serviceMapper.Map(physical, peopleDto));
Console.WriteLine("Hello World!");
}