如何验证需要在XVAL访问库的属性?
-
19-09-2019 - |
题
我试图使用XVAL来验证新用户的注册。我试图执行检查,看看如果用户名新用户正在尝试与注册时已经采取的逻辑时,遇到了一个圆锯。我似乎无法找到一个方法来做到这一点,而无需我的用户单位对我的UsersRepository依赖性。这是我需要找到一种方法,在我的用户实体来实现方法:
public IEnumerable<ErrorInfo> ValidateUniqueUserName(string username)
{
if(usersRepository.Users.Exists(m => (m.UserName == username)))
yield return new ErrorInfo("UserName", "User name already exists");
}
我如何能继续使用XVAL这个场景,让我的用户实体从我UsersRepository脱钩?任何想法
解决方案
DDD会建议你可能有一个域名服务抽象的用户从域中验证(不变的强制执行措施)回购协议。
我想知道从上面的例子驻留代码(验证服务)?但我建议你确保它是在域中。 这里是一个聪明的方式一>到复杂的验证附加到仍然支持IDataErrorInfo
接口实体。
我的建议是,你返回查询Users.Exists
您的验证方法中的域名服务。是这样的:
base.AddRule(new ValidationRule()
{
Properties = "username",
Description = "User name already exists",
validator = () => !(new UserService()).Users.Exists(m => (m.UserName == username))
});
在上面的例子中我将使用DI注入适当的依赖关系到UserService
用于回购/数据的访问,但是,如果你喜欢你可以使用一个工厂或手动DI对象创建方法:
base.AddRule(new ValidationRule()
{
Properties = "username",
Description = "User name already exists",
validator = () =>
{
UserService us = ObjectFactory.GetInstance<UserService>();
return !us.Users.Exists(m => (m.UserName == username));
}
});
注意:上述方法要求validator
属性被设置到false
指示无效状态(在不明确的情况下)。
不隶属于 StackOverflow