在最新推荐的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?
答案 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();