当我使用Mapper.CreateMap多次调用相同类型时会发生什么?
它是否会覆盖先前的映射?如果是这样,是否有可能在尝试创建已经创建的映射时抛出异常?
当我使用Mapper.CreateMap多次调用相同类型时会发生什么?
它是否会覆盖先前的映射?如果是这样,是否有可能在尝试创建已经创建的映射时抛出异常?
如果多次调用相同源和目标的Mapper.CreateMap<TSource, TDestination>()
,则不会发生任何事情,因为它不会为映射配置设置任何扩展。 如果像这样设置IMappingExpression的覆盖:
Mapper.CreateMap<TSource, TDestination>().ConstructUsing(x=>new TDestination(x.SomeField))
,
那么是的,此映射的配置将被替换为新的配置。
关于您问题的第二部分,我知道验证映射是否已经创建的方法:
public TDestination Resolve<TSource, TDestination>(TSource source)
{
var mapped = Mapper.FindTypeMapFor(typeof(TSource), typeof(TDestination)); //this will give you a reference to existing mapping if it was created or NULL if not
if (mapped == null)
{
var expression = Mapper.CreateMap<TSource, TDestination>();
}
return Mapper.Map<TSource, TDestination>(source);
}