我是AutoMapper框架的新手。我有三到五个复杂的对象,必须映射到一个对象
例如,ChipInfo,HardDiskInfo,MonitorInfo,MemoryCardInfo必须映射到LaptopInfo,因为LaptopInfo对象具有必须从所有四个对象填充的字段。
如何使用AutoMapper实现这一目标。我无法找到任何答案,这些答案允许我使用.ForMember对四个对象进行CreateMap。请帮忙谢谢
以下是更新的代码
public class AutoMapperConfig
{
Mapper.Initialize(x =>
{
x.AddProfile<chipInfoMapperProfile>();
x.AddProfile<(hardDiskInfoMapperProfile>();
x.AddProfile<monitorInfoMapperProfile>();
x.AddProfile<memoryCardInfoMapperProfile>();
});
}
public class chipInfoMapperProfile : Profile
{
protected override void Configure()
{
Mapper.CreateProfile(Profiles.ChipProfileName).CreateMap<chipInfo, laptopInfo>()
.ForMember(x => x.LapTopChipProperty, opt => opt.MapFrom(source => source.ChipProperty));
}
}
public class hardDiskInfoMapperProfile : Profile
{
protected override void Configure()
{
Mapper.CreateProfile(Profiles.hardDiskProfileName).CreateMap<hardDiskInfo, laptopInfo>()
.ForMember(x => x.LaptopHardDiskProperty, opt => opt.MapFrom(source => source.HardDiskProperty));
}
}
public class monitorInfoMapperProfile: Profile
{
protected override void Configure()
{
Mapper.CreateProfile(Profiles.monitorInfoProfileName).CreateMap<monitorInfo, laptopInfo>()
.ForMember(x => x.LaptopMonitorInfoProperty, opt => opt.MapFrom(source => source.MonitorInfoProperty));
}
}
答案 0 :(得分:1)
如果为这些组合中的每一个创建映射,则可以使用允许映射到现有对象的重载。 Here's an example。
您的代码可能如下所示:
var laptopInfo = new LaptopInfo();
Mapper.Map(chipInfo, laptopInfo);
Mapper.Map(hardDiskInfo, laptopInfo);
Mapper.Map(monitorInfo, laptopInfo);
Mapper.Map(memoryCardInfo, laptopInfo);
基本上,您只需将映射应用于每个源对象的现有/目标对象。