将自定义类型转换器 (ITypeConverter) 与 AutoMapper 一起使用时,如果源值为 ,则似乎不会输入类型转换器代码null
,例如:
Mapper.CreateMap<string, Enum>().ConvertUsing<EnumConverter>();
Assert.AreEqual(Enum.Value1, Mapper.Map<Enum>("StringValue1"));
Assert.AreEqual(Enum.Value1, Mapper.Map<Enum>(null);
Assert.AreEqual(Enum.Value1, Mapper.Map<Enum?>(null);
类型转换器看起来像:
public class EnumConvertor: ITypeConverter<string, Enum>
{
public Enum Convert(ResolutionContext context)
{
string value = (string) context.SourceValue;
switch (value)
{
case "StringValue2":
return Enum.Value2;
case "StringValue3":
return Enum.Value3;
case "StringValue1":
default:
return Enum.Value1;
}
}
}
在最后两种情况下,结果是:
Assert.AreEqual(Enum.Value1, Mapper.Map<Enum>(null);
0 - 不是有效的枚举值
Assert.AreEqual(Enum.Value1, Mapper.Map<Enum?>(null);
无效的
从调试到测试,在这两种情况下,自定义 TypeConverter 永远不会受到影响,而且 AutoMapper 似乎在映射器中进行了一些初始检查以进行映射,而无需求助于 TypeConverter?
如果我指定一个空字符串 (""),则测试按预期工作。