我希望能够为同一类的多个属性重复使用相同的IValueResolver,所有三个属性都要经过相同的映射处理,因此我不想重复编写几乎相同的代码。
我想实现以下功能:
我想实现以下功能:
CreateMap<AlertLine, AlertLineDto>()
.ForMember(dest => dest.BusinessArea, opt => opt.MapFrom<MyResolver>())
CreateMap<AlertLine, AlertLineDto>()
.ForMember(dest => dest.Division, opt => opt.MapFrom<MyResolver>())
CreateMap<AlertLine, AlertLineDto>()
.ForMember(dest => dest.SubDivision, opt => opt.MapFrom<MyResolver>())
public class MyResolver : IValueResolver<AlertLine, AlertLineDto, string>
{
private readonly ICatalogService _catalogService;
public BusinessAreaResolver(ICatalogService catalogService)
{
_catalogService = catalogService;
}
public string Resolve(AlertLine source, AlertLineDto destination, string destMember, ResolutionContext context)
{
// How to access the destination property name to be mapped?
// BusinessArea, Division, SubDivision, and so on...
string val = string.Empty;
var variant = JsonSerializer.Deserialize<AddlInformation>(source.AddlDimension);
if (variant.BUSINESS_AREA_ID > 0)
{
var businessArea = _catalogService.GetCachedBusinessAreaById(variant.BUSINESS_AREA_ID);
val = businessArea?.Description;
}
return val;
}
}
IMemberValueResolver
代替IValueResolver
。自定义提供给解析器的源值。 - Akshay G