asp.netmvc3とDDDを使用してWebアプリケーションを開発しています。私のドメインモデルの検証には、FluentValidationを使用しています。これは流暢な検証を行う私の最初のプロジェクトであり、まだエンティティの学習とモデリングを行っています。
私のエンティティCustomerには、システム内で一意である必要がある2つのプロパティがあります。これらのプロパティはEメールとCPFです(これはブラジルのドキュメントであり、すべてのシステムで一意である必要があります)。知りたいのですが、どうすればいいですか?
ああ、私のアイデアは、(コンストラクターによって)私のリポジトリをCustomerの検証クラスに挿入し、カスタム検証によってチェックすることです。検証は、ID(挿入の場合は0、更新の場合は実際のID)とは異なるこの電子メールのレコードがテーブルにあるかどうかをリポジトリを使用してチェックします。 dは常に真です)。
私はこのようなことを試みています:
public class CustomerValidator : AbstractValidator<Customer> {
protected ICustomerRepository Repository { get; set; }
// I intend to inject it by IoC with Unity.. is it possible ?
public CustomerValidator(ICustomerRepository rep)
{
this.Repository = rep;
// other properties
RuleFor(customer = customer.Email)
.EmailAddress()
.NotEmpty()
.Must(email = { return Repository.IsEmailInUse(email, ?); });
RuleFor(customer = customer.CPF)
.NotEmpty()
.Must(cpf = { return Repository.IsCPFInUse(cpf, ?); });
} }
可能かどうかわからないので、バリデーター内にリポジトリを挿入します。.Mustメソッド拡張子でIDを取得するにはどうすればよいですか?またはそれを行う別の方法はありますか?