Я использую инфраструктуру Fluent Validation в моем проекте ASP.net MVC 3. До сих пор все мои проверки были очень простыми (убедитесь, что строка не пустая, только определенной длины и т. Д.), Но теперь мне нужно проверить, существует ли что-то в базе данных или нет.
- Следует ли в этом случае использовать Fluid Validation?
- Если проверка базы данных должна выполняться с использованием Fluent Validation, то как мне обрабатывать зависимости? Классы валидатора создаются автоматически, и мне нужно как-то передать его одному из моих экземпляров репозитория, чтобы выполнить запрос к моей базе данных.
Пример того, что я пытаюсь проверить, может:
У меня есть выпадающий список на моей странице со списком выбранных элементов. Я хочу проверить, что выбранный ими элемент действительно существует в базе данных, прежде чем пытаться сохранить новую запись.
Редактировать
Вот пример кода регулярной проверки в среде Fluent Validation:
[Validator(typeof(CreateProductViewModelValidator))]
public class CreateProductViewModel
{
public string Name { get; set; }
public decimal Price { get; set; }
}
public class CreateProductViewModelValidator : AbstractValidator<CreateProductViewModel>
{
public CreateProductViewModelValidator()
{
RuleFor(m => m.Name).NotEmpty();
}
}
Контроллер:
public ActionResult Create(CreateProductViewModel model)
{
if(!ModelState.IsValid)
{
return View(model);
}
var product = new Product { Name = model.Name, Price = model.Price };
repository.AddProduct(product);
return RedirectToAction("Index");
}
Как видите, я никогда сам не создавал Валидатор. Это работает из-за следующей строки в Global.asax
:
FluentValidation.Mvc.FluentValidationModelValidatorProvider.Configure();
Проблема в том, что теперь у меня есть валидатор, который должен взаимодействовать с моей базой данных, используя репозиторий, но, поскольку я не создаю валидаторы, я не знаю, как я получу эту зависимость, кроме жесткого кодирования тип бетона.