0
Doğrulama yapılması gereken her alan için kuralların yazılmasını önlemek için bir olasılık var mıdır, örnek olarak tüm özellikler Remarks
hariç doğrulanmalıdır. Ve her özellik için RuleFor
yazmayı bırakmayı düşünüyordum.FluentValidation Library'yi kullanarak özelliklerde doğrulama işlemini otomatikleştirin
public class Validator<T> : AbstractValidator<T>
{
public Validator(Func<PropertyInfo, bool> filter) {
foreach (var propertyInfo in typeof(T)
.GetProperties()
.Where(filter)) {
var expression = CreateExpression(propertyInfo);
RuleFor(expression).NotEmpty();
}
}
private Expression<Func<T, object>> CreateExpression(PropertyInfo propertyInfo) {
var parameter = Expression.Parameter(typeof(T), "x");
var property = Expression.Property(parameter, propertyInfo);
var conversion = Expression.Convert(property, typeof(object));
var lambda = Expression.Lambda<Func<T, object>>(conversion, parameter);
return lambda;
}
}
Ve gibi kullanılabilir:: Burada
public class CustomerDto
{
public int CustomerId { get; set; } //mandatory
public string CustomerName { get; set; } //mandatory
public DateTime DateOfBirth { get; set; } //mandatory
public decimal Salary { get; set; } //mandatory
public string Remarks { get; set; } //optional
}
public class CustomerValidator : AbstractValidator<CustomerDto>
{
public CustomerValidator()
{
RuleFor(x => x.CustomerId).NotEmpty();
RuleFor(x => x.CustomerName).NotEmpty();
RuleFor(x => x.DateOfBirth).NotEmpty();
RuleFor(x => x.Salary).NotEmpty();
}
}
Tabii – Domysee
ne sıklıkla tüm özelliklerin aynı doğrulama modeli var mı? – Dennis
@Domysee, lütfen bir örnek paylaşır mısınız? –