public override BrokenRules Validate <T>(T target, ValidationCallContext callContext) { callContext = callContext ?? ValidationCallContext.AllRules; LogValidationRequested(target, callContext); ICollection <IValidationProvider <T> > providers = GetValidationProviders <T>(); LogValidatorsAboutToBeApplied(providers, target); var results = new List <BrokenRules>(); double totalDuration = 0d; foreach (IValidationProvider <T> provider in providers) { double duration; ValidationProviderResult result = ExecuteValidation(target, callContext, provider, out duration); totalDuration += duration; LogBrokenRules(result, provider); results.Add(result.BrokenRules); if (!result.BrokenRules.IsValid && StopOnFirstBrokenRules) { break; } } LogValidationFinished(totalDuration); return(BrokenRules.Merge(results)); }
protected void LogBrokenRules <T>(ValidationProviderResult result, IValidationProvider <T> provider) { if (!result.ObjectWasValidated) { Logger.InfoFormat("Validator '{0}' choose not to accept target", provider); return; } LogBrokenRules(provider, result.BrokenRules); }
private ValidationProviderResult ExecuteValidation <T>(T target, ValidationCallContext callContext, IValidationProvider <T> validator, out double duration) { ValidationProviderResult result = null; duration = With.PerformanceCounter(() => { result = validator.Validate(target, callContext); }) * 1000; Logger.DebugFormat("Validator '{0}' executed in '{1}ms'", validator, duration); if (PerformanceThresholds.IndividualValidatorInMilliseconds > 0 && PerformanceThresholds.IndividualValidatorInMilliseconds < duration) { Logger.WarnFormat( "Performance of validator '{0}' exceeds threshold; threshold: '{1}ms', actual: '{2}ms'", validator, PerformanceThresholds.IndividualValidatorInMilliseconds, duration); } return(result); }