0

我是 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));
        }
    }
4

1 回答 1

1

如果为这些组合中的每一个创建映射,则可以使用允许映射到现有对象的重载。这是一个例子

您的代码可能如下所示:

var laptopInfo = new LaptopInfo();

Mapper.Map(chipInfo, laptopInfo);
Mapper.Map(hardDiskInfo, laptopInfo);
Mapper.Map(monitorInfo, laptopInfo);
Mapper.Map(memoryCardInfo, laptopInfo);

本质上,您只是将映射应用到每个源对象的现有/目标对象。

于 2014-07-09T17:01:17.543 回答