【发布时间】:2012-01-09 02:46:51
【问题描述】:
我在我的 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();
问题是现在我有一个验证器,它需要使用存储库与我的数据库交互,但由于我没有创建验证器,我不知道如何获取传递的依赖项,除了硬编码具体类型。
【问题讨论】:
-
我添加了一个示例 hot 以在您的验证中使用会话依赖注入。希望它会有所帮助。附言不需要赏金就说你需要一个例子......
-
除非你的例子没有给我我所要求的。我已经告诉过你,我自己不会创建验证器。它由 Fluent Validation 框架自动创建。 FluentValidation 需要一个默认的无参数构造函数,否则将无法创建验证器。
-
已更新,您将不得不使用 IoC 容器在构造函数之外注入 Session 对象。
标签: asp.net-mvc fluentvalidation asp.net-mvc-validation