将值传递给自定义属性

时间:2018-08-31 01:02:08

标签: c# attributes

我想自定义属性。说

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;}
}

1 个答案:

答案 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
}