我在我的ASP.net MVC 3項目中使用Fluent驗證框架。到目前爲止,我所有的驗證都非常簡單(確保字符串不是空的,只有一定的長度等等),但是現在我需要驗證數據庫中是否存在或不存在。在ASP.net MVC流利的驗證 - 數據庫驗證
- 在這種情況下應該使用Fluent Validation嗎?
- 如果數據庫驗證應該使用Fluent驗證完成,那麼我該如何處理依賴關係?驗證器類是自動創建的,我需要以某種方式將它傳遞給我的一個存儲庫實例以查詢我的數據庫。
的什麼,我試圖驗證實力的一個例子:
我有一個下拉列表,我的網頁上選擇的項目列表。我想在嘗試保存新記錄之前驗證它們選擇的項目實際上存在於數據庫中。
編輯
這裏是流利的驗證框架定期驗證的代碼示例:
[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();
的問題是,現在我有一個需要使用存儲庫與我的數據庫交互的驗證,但因爲我沒有創建驗證我不知道我將如何獲得傳入的依賴關係,而不是對具體類型進行硬編碼。
我在驗證中添加了一個很熱的例子來使用會話依賴注入。希望它會有所幫助。附:不需要賞金只是說你需要一個例子... – gdoron
除了你的榜樣不給我我所要求的。我已經告訴過你,我不會自己創建驗證器。它由Fluent驗證框架自動創建。 FluentValidation需要一個默認的無參數構造函數,否則將無法創建驗證器。 – Dismissile
已更新,您將不得不使用IoC容器將Session對象注入構造函數之外。 – gdoron