Плавная проверка и IoC (уникальное поле)

Я разрабатываю веб-приложение с asp.net mvc 3 и DDD. Для проверки моей модели предметной области я использовал Fluent Validation. Это мой первый проект с быстрой проверкой, и я все еще изучаю и моделирую сущности.

У моего объекта Customer есть два свойства, которые должны быть уникальными в моей системе, это Email и CPF (это бразильский документ, и он должен быть уникальным во всей системе). Я хотел бы знать, как я могу это сделать?

Итак, моя идея заключается в том, чтобы ввести (конструктором) мой репозиторий в мой класс проверки клиента и проверить его с помощью специальной проверки. Проверка будет проверяться с использованием репозитория, если в моей таблице есть запись с этим адресом электронной почты, отличная от идентификатора (0 для вставок и реального идентификатора для обновлений ... Мне не нужно проверять запись, которую я обновляю, потому что это '' буду всегда правдой).

Я пробую что-то вроде этого:

 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, ?); });

     }   }

Я не знаю, возможно ли вставить репозиторий внутри валидатора, и как я могу получить Id в расширении метода .Must? Или есть другой способ сделать это?

5
задан abatishchev 27 August 2013 в 23:51
поделиться