在AfterMap中不使用Automapper的全局Mapper变量

时间:2015-08-28 09:16:07

标签: c# .net automapper

使用AfterMap时,有没有办法在AutoMapper中获取当前的映射上下文?

public class DefaultMappingProfile : Profile
{
    protected override void Configure()
    {
        this.CreateMap<SomeList, List<SpecialItem>>()
            .AfterMap((src, dst) => dst.AddRange(
                 src.elem.Select(Mapper.Map<SpecialItem>)));

我尝试使用.ConstructUsing(context => {}),但这给了我与使用AfterMap(!?)时不一样的结果。但我不想在这里访问全局变量Mapper。有没有办法绕过这里访问全局变量?

1 个答案:

答案 0 :(得分:2)

您可以替代使用ConvertUsing<TSource, TDestination>,例如:

CreateMap<data.BillCycle, domain.BillCycle>().ConvertUsing<BillCycleConverter>();

该类将实现ITypeConverter<TSource, TDestination>并允许您访问映射器:

public class BillCycleConverter : ITypeConverter<data.BillCycle, domain.BillCycle>
{
    public domain.BillCycle Convert(ResolutionContext context)
    {
        context.Engine.Map<X, Y>...
    }
}

Custom Type Converters