Передать значение в пользовательский атрибут - PullRequest
0 голосов
/ 31 августа 2018

Я хочу настроить атрибут. Say

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 голосов
/ 31 августа 2018

ValidationContext обеспечивает доступ к зарегистрированному контейнеру внедрения зависимостей через GetService.

Цитата Эндрю Лок :

Как видите, вам предоставляется ValidationContext как часть вызова метода. Объект контекста содержит ряд свойств, связанных с проверяемым объектом, а также этот удобный номер:

открытый объект GetService (Type serviceType);

Так что вы можете использовать ValidationContext примерно так:

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
    var service = (IExternalService) validationContext
                         .GetService(typeof(IExternalService));
    // use service
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...