Я разрабатываю веб-приложение с 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? Или есть другой способ сделать это?