FluentValidation #1
نویسنده: میثم مجیدی
تاریخ: ۱۳۹۱/۰۸/۲۰ ۱۰:۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public class Customer
{
public int Id { get; set; }
public string Surname { get; set; }
public string Forename { get; set; }
public decimal Discount { get; set; }
public string Address { get; set; }
}
using FluentValidation;
public class CustomerValidator : AbstractValidator<Customer>
{
public CustomerValidator
{
RuleFor(customer => customer.Surname).NotNull();
}
}
اعتبارسنجی زنجیره ای برای یک خاصیت
RuleFor(customer => customer.Surname).NotNull().NotEqual("foo");
Customer customer = new Customer(); CustomerValidator validator = new CustomerValidator(); ValidationResult results = validator.Validate(customer);
خروجی متد Validate، یک ValidationResult است که شامل دو خاصیت زیر میباشد:
Customer customer = new Customer();
CustomerValidator validator = new CustomerValidator();
ValidationResult results = validator.Validate(customer);
if(! results.IsValid)
{
foreach(var failure in results.Errors)
{
Console.WriteLine("Property " + failure.PropertyName + " failed validation. Error was: " + failure.ErrorMessage);
}
}
پرتاب استثناها (Throwing Exceptions)
Customer customer = new Customer(); CustomerValidator validator = new CustomerValidator(); validator.ValidateAndThrow(customer);
public class Customer
{
public string Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string Line1 { get; set; }
public string Line2 { get; set; }
public string Town { get; set; }
public string County { get; set; }
public string Postcode { get; set; }
}
public class AddressValidator : AbstractValidator<Address>
{
public AddressValidator()
{
RuleFor(address => address.Postcode).NotNull();
//etc
}
}
public class CustomerValidator : AbstractValidator<Customer>
{
public CustomerValidator()
{
RuleFor(customer => customer.Name).NotNull();
RuleFor(customer => customer.Address).SetValidator(new AddressValidator())
}
}
استفاده از Validatorها برای مجموعهها (Collections)
public class Customer
{
public IList<Order> Orders { get; set; }
}
public class Order
{
public string ProductName { get; set; }
public decimal? Cost { get; set; }
}
var customer = new Customer();
customer.Orders = new List<Order>
{
new Order { ProductName = "Foo" },
new Order { Cost = 5 }
};
public class OrderValidator : AbstractValidator<Order>
{
public OrderValidator()
{
RuleFor(x => x.ProductName).NotNull();
RuleFor(x => x.Cost).GreaterThan(0);
}
}
این Validator میتواند داخل CustomerValidator مورد استفاده قرار بگیرد (با استفاده از متد SetCollectionValidator):
public class CustomerValidator : AbstractValidator<Customer>
{
public CustomerValidator()
{
RuleFor(x => x.Orders).SetCollectionValidator(new OrderValidator());
}
}
می توان با استفاده از متد Where یا Unless روی اعتبارسنجی شرط گذاشت:
RuleFor(x => x.Orders).SetCollectionValidator(new OrderValidator()).Where(x => x.Cost != null);
گروه بندی قوانین اعتبارسنجی
public class PersonValidator : AbstractValidator<Person>
{
public PersonValidator()
{
RuleSet("Names", () =>
{
RuleFor(x => x.Surname).NotNull();
RuleFor(x => x.Forename).NotNull();
});
RuleFor(x => x.Id).NotEqual(0);
}
}
var validator = new PersonValidator(); var person = new Person(); var result = validator.Validate(person, ruleSet: "Names");