首先给要验证的类绑定关联类,验证之后移除关联类。但是现在遇到的问题是,当执行完 Validator.TryValidate方法后,移除关联类的代码无效了,下次换另一种MetadataType进行关联验证的时候,还是会跑到第一次绑定的关联类中指定的CustomValidation方法中,请问怎样才能多次绑定不同的关联类?
代码如下:
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.AddProvider(typeProvider, targetType);
//如果在此处进行移除,后面的验证方法就不再触发。
//但如果在验证方法执行之后再移除,下次验证的地方还是会触发首次绑定的方法。
//TypeDescriptor.RemoveProvider(typeProvider, targetType);
}
var validationContext = new ValidationContext(instance, null, null);
var validationResults = new List<ValidationResult>();
bool result = 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.RemoveProvider(typeProvider, targetType);
}
}