尝试使用
IMemberValueResolver
而不是
IValueResolver
如果不同成员的逻辑不同,则发送属性名而不是实际的源值。
CreateMap<AlertLine, AlertLineDto>()
.ForMember(
dest => dest.BusinessArea,
opt => opt.MapFrom<MyResolver, string>(p => "BusinessArea")))
//opt => opt.MapFrom<MyResolver, string>(source => source.BusinessArea))
.ForMember(
dest => dest.Division,
opt => opt.MapFrom<MyResolver, string>(p => "Division")))
//opt => opt.MapFrom<MyResolver, string>(source => source.Division))
.ForMember(
dest => dest.SubDivision,
opt => opt.MapFrom<MyResolver, string>(p => "SubDivision"));
//opt => opt.MapFrom<MyResolver, string>(source => source.SubDivision))
这个
propertyName
参数将帮助您根据参数的值确定当前调用的映射。这个
returnValue
将映射到相应的目标成员
public class MyResolver : IMemberValueResolver<AlertLine, AlertLineDto, string, string>
{
public string Resolve(AlertLine source, AlertLineDto destination, string propertyName, string destMember, ResolutionContext context)
{
string sourceValue = string.Empty;
string returnValue = string.Empty;
switch (propertyName)
{
case "BusinessArea":
sourceValue = source.BusinessArea;
//returnValue = Some Logic here
break;
case "Division":
sourceValue = source.Division;
//returnValue = Some Logic here
break;
case "SubDivision":
sourceValue = source.SubDivision;
//returnValue = Some Logic here
break;
default:
break;
}
return returnValue;
}
}