我在我的 ASP.net MVC 3 项目中使用 Fluent Validation 框架。到目前为止,我的所有验证都非常简单(确保字符串不为空,只有一定长度等),但现在我需要验证数据库中是否存在某些内容。
- 在这种情况下应该使用 Fluent 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();
问题是现在我有一个需要使用存储库与我的数据库交互的验证器,但是由于我没有创建验证器,所以除了硬编码具体类型之外,我不知道如何传入该依赖项。