5
我正在开发一个带有asp.net mvc 3和DDD的Web应用程序。对于我的域模型验证,我一直使用Fluent验证。这是我的第一个流畅验证项目,我仍然在学习和建模实体。Fluent验证和IoC(唯一字段)
我的实体客户有两个属性需要在我的系统中唯一,这些属性是电子邮件和CPF(这是一个巴西文档,需要在所有系统中都是唯一的)。我想知道,我该怎么办呢?
Soo,我的理念是,在我的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, ?); });
} }
我不知道是否是可能的,注入验证内部存储库,我怎么能拿的Id的。必须扩展方法?还是有另一种方法来做到这一点?
感谢您的awser Darin,但您的评论导致我感到困惑。这个验证应该在另一个地方吗?在我的数据库中,我有一些独特的约束条件可以进行验证,但我需要通过域模型和UI来阻止它,以避免出现异常,是吗?此验证类位于我的域的类库项目中,是不是也适用?或者我应该做一个验证层?我对DDD和概念了解不多,我正在努力学习...谢谢:) –
现在,它正在努力工作!谢谢! –