У меня есть класс, который имеет 2 метода:
MaxLength(string text, int maxLength, string propName, string message = null);
MinValue(int value, int min, string propName, string message = null);
Поскольку пользователь может использовать его, передавая каждое из значений.Я хочу сделать это проще и более похожим на autopper, когда они хотят проверить класс.например,
public class MyModel {
public string Category { get; set; }
public int Number { get; set; }
}
на тот момент, когда им нужно будет написать
MyModel model = //comes from API call or where ever
var validator = new Validator();
validator.MaxLength(model.Category, 4, "Category");
validator.MinValue(model.Number , 3, "Number ");
, чего я хочу добиться, так это возможности настроить сопоставления для класса:
public class Profile1 : ClassValidationProfile
{
public Profile1()
{
CreateMap<Model1>()
.ForMember(x => x.Category, m => m.MaxLength(4))
.ForMember(x => x.Number , m => m.MinValue(3));
}
}
так, основываясь на автопереработчике, у меня есть:
IMappingExpression<T> ForMember<TMember>(Expression<Func<T, TMember>> member, Action<IValidatorExpression> memberAction)
, но это позволило бы мне настроить .ForMember(x => x.Name, m => m.MinValue(18))
, что было бы некорректно и с ошибкой во время выполнения.
Я хотел бы иметь возможностьограничить Действие memberAction
их правильным типом (строки для строки, целые числа для целых и т. д.).Поэтому, когда пользователь настраивает свои сопоставления, он знает, какие методы действия являются допустимыми для типа свойства, который они дали в первой части выражения.
Затем он может использовать эту информацию, чтобы иметь возможность генерировать действительный валидаторметоды для каждого из свойств.