ASP.net MVC 3 プロジェクトで Fluent Validation フレームワークを使用しています。これまでのところ、すべての検証は非常に単純でした (文字列が空でないこと、特定の長さだけであることなど) ですが、データベースに何かが存在するかどうかを確認する必要があります。
- この場合、Fluent Validation を使用する必要がありますか?
- Fluent Validation を使用してデータベースの検証を行う必要がある場合、依存関係をどのように処理すればよいですか? バリデータ クラスは自動的に作成されます。データベースにクエリを実行するには、何らかの方法でリポジトリ インスタンスの 1 つを渡す必要があります。
私が検証しようとしているものの例は次のとおりです。
ページに、選択した項目のリストを含むドロップダウン リストがあります。新しいレコードを保存する前に、選択した項目が実際にデータベースに存在することを確認したいと考えています。
編集
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");
}
ご覧のとおり、私は Validator を自分で作成することはありません。これは、 の次の行により機能しますGlobal.asax
。
FluentValidation.Mvc.FluentValidationModelValidatorProvider.Configure();
問題は、リポジトリを使用してデータベースとやり取りする必要があるバリデーターができたことですが、バリデーターを作成していないため、具体的な型をハードコーディングする以外に、その依存関係を渡す方法がわかりません。