111,129
社区成员
发帖
与我相关
我的任务
分享
public static string ValidateModel<MetadataType>(this object instance)
{
var targetType = instance.GetType();
var typeProvider = new AssociatedMetadataTypeTypeDescriptionProvider(targetType, typeof(MetadataType));
try
{
if (targetType != typeof(MetadataType))
{
TypeDescriptor.AddProviderTransparent(typeProvider, targetType);
}
var validationContext = new ValidationContext(instance, null, null);
var validationResults = new List<ValidationResult>();
Validator.TryValidateObject(instance, validationContext, validationResults);
if (validationResults.Count > 0)
{
return validationResults.First().ErrorMessage;
}
else
{
return string.Empty;
}
}
catch (Exception ex)
{
return ex.Message;
}
finally
{
TypeDescriptor.RemoveProviderTransparent(typeProvider, targetType);
}
}

if (targetType != typeof(MetadataType))
{
TypeDescriptor.AddProvider(typeProvider, targetType);
TypeDescriptor.RemoveProvider(typeProvider, targetType);
}
后面的验证方法不再触发,证明确实是移除掉关联类了。
为什么在执行了 Validator.TryValidateObject 之后就无法移除了呢?