好的,我想我已经弄清楚了:
因此,如果您想在源值和目标值之间进行某种转换,则 anIValueFormatter
仅在目标类型为 a时才有效string
,并且 aValueResolver
仅在ResolveCore()
方法“知道”要使用的属性时才有效(这不会'如果您的解析器是通用的,即不适用于特定属性,则情况并非如此)。
解决方法
幸运的是,总是有MapFrom
,它提供了解析器和格式化程序所缺乏的灵活性。
转换器接口
我最终编写了一个界面来简单灵活地处理我认为非常常见的场景:双向转换......
public interface ITwoWayConverter<TInput, TOutput>
{
TOutput ConvertForward(TInput value);
TInput ConvertBackward(TOutput value);
}
示例转换器:
public class PhoneNumberToString : ITwoWayConverter<long, string>
{
public string ConvertForward(long value)
{
return string.Format("{0:(###) ###-####}", Convert.ToInt64(value));
}
public long ConvertBackward(string value)
{
return Convert.ToInt64(Regex.Replace(value, @"\D", string.Empty));
}
}
示例用法:
Mapper.CreateMap<User, UserViewModel>()
.ForMember(dest => dest.PhoneNumber, opt => opt
.MapFrom(orig => new PhoneNumberToString().ConvertForward(orig.PhoneNumber)));