public void AddValidationRule <TModel>(AbstractValidator <TModel> validator) where TModel : class { var genericType = validator.GetType().GetGenericArguments()[0]; _validators.Add(genericType.Name, validator); }
public ValidatorDecorator(IValidator <TModel> validator, ValidatorCache cache) { _validator = (AbstractValidator <TModel>)validator; _cache = cache; SetValidatorContextAsCustomState(_validator); cache.RegisterValidator(_validator); var addRuleMethod = _validator.GetType().GetMethod("AddRule", BindingFlags.Instance | BindingFlags.NonPublic); addRuleMethod.Invoke(_validator, new object[] { new DomainValidatorsValidator(GetRulesToValidate, GetAsyncRulesToValidate) }); }
public static string GetJavascript <T>(AbstractValidator <T> validator) { var jsBuilder = new StringBuilder(); jsBuilder.AppendLine(validator.GetType().Name + ":function (obj) { \r\n var errors = {}; \r\n Object.keys(obj).forEach(function(element) {\r\n errors[element] = []; \r\n });"); var props = typeof(T).GetProperties(); foreach (var property in props) { var propertyName = property.Name; foreach (var element in validator.CreateDescriptor().GetValidatorsForMember(propertyName)) { var parameters = new Dictionary <string, object>(); var errorKey = element.GetType().Name; switch (element) { case IComparisonValidator cv: parameters.Add(nameof(cv.ValueToCompare), cv.ValueToCompare); break; case IBetweenValidator bv: parameters.Add(nameof(bv.From), bv.From); parameters.Add(nameof(bv.To), bv.To); break; case ILengthValidator lv: parameters.Add(nameof(lv.Min), lv.Min); parameters.Add(nameof(lv.Max), lv.Max); break; } foreach (var converterType in TypeLookup[element.GetType()]) { if (Activator.CreateInstance(converterType, args: element) is IJsConverterValidator converter) { jsBuilder.AppendLine(converter.GetJs(propertyName, errorKey, parameters)); } } } } jsBuilder.AppendLine("return errors;\r\n},"); return(jsBuilder.ToString()); }
public static List <string> GetActualErrors <T>(T seedData, AbstractValidator <T> abstractValidator) { var errorsList = new List <string>(); var abstractValidatorName = abstractValidator.GetType().Name; var js = JsConverter.GetJavascript(abstractValidator); js = js.Replace(abstractValidatorName + ":function", "function " + abstractValidatorName) .Remove(js.LastIndexOf(",", StringComparison.Ordinal)); var engine = new Engine().Execute(js); dynamic errorsResult = (engine.Invoke(abstractValidatorName, seedData) .ToObject() as IDictionary <string, object>)? .Values .FirstOrDefault(); if (errorsResult != null) { errorsList.Add(errorsResult[0].errorKey.ToString()); } return(errorsList); }