我想自定义属性。说
public class IdExistAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value,
ValidationContext validationContext)
{
string id= value.ToString();
if(ListOfId.Contains(id))
{
return new ValidationResult("Id is already existing");
}
return ValidationResult.Success;
}
}
问题是ListOfId
来自服务,我无法在属性内使用服务。那么如何从外面传递呢?
我想将该属性用作
private string _id;
[IdExist]
public string Id
{
get{return _id;}
set{_id=value;}
}
答案 0 :(得分:1)
ValidationContext
通过GetService
提供对已注册的依赖项注入容器的访问。
引用Andrew Lock:
如您所见,在方法调用中为您提供了ValidationContext。上下文对象包含许多与当前正在验证的对象有关的属性,以及以下方便的数字:
公共对象GetService(Type serviceType);
因此您可以像这样使用ValidationContext
:
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var service = (IExternalService) validationContext
.GetService(typeof(IExternalService));
// use service
}