在BeforeMap / AfterMap中使用Map方法进行AutoMapper(非静态)配置

时间:2016-04-08 17:39:53

标签: automapper

在最新推荐的AutoMapper版本(4.2.1)中,静态模型已被放弃。因此,在新模型中,配置可能如下所示:

var config = new MapperConfiguration(
        cfg =>
          {
          cfg.CreateMap<Market_DTO, IMarket>().ConstructUsingServiceLocator();
          cfg.CreateMap<MarketList_DTO, IMarketList>()
            .ConstructUsingServiceLocator()
            .BeforeMap((src, dest) => src.Markets.ForEach(x =>  dest.Add(Mapper.Map<Market_DTO, IMarket>(x))));
          cfg.ConstructServicesUsing(Type => Root.Service.GetInstance(Type));
      });

在运行时,这将产生一个异常,即从Market_DTO到IMarket(在BeforeMap语句中)的Map是“缺少类型映射配置”,可能是因为我使用的是静态Mapper.Map方法。但是,如何使用BeforeMap / AfterMap语句在配置中定义Map?

1 个答案:

答案 0 :(得分:1)

对于仍在寻找答案的人:

您可以在MapperConfiguration之外声明一个IMapper,将其用作Before / AfterMap中的闭包,然后再创建它。例如:

IMapper mapper = null;

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Model.Entities.Invoice, Invoice>()
        .AfterMap((src, dest) =>
        {
            dest.Supplier = mapper.Map<InvoiceSupplier>(src);
        });
});

mapper = config.CreateMapper();