Помощь с результатами проверки корпоративной библиотеки - PullRequest
1 голос
/ 28 февраля 2009

Я пытаюсь использовать блоки проверки Entlib 4, но сталкиваюсь с проблемой четкой идентификации недействительных свойств в результатах проверки.

В следующем примере, если свойство City не проходит проверку, я не могу узнать, было ли это свойство City объекта HomeAddress или объекта WorkAddress.

Есть ли простой способ сделать это без создания пользовательских валидаторов и т. Д.?

Любое понимание того, что я упускаю или не понимаю, будет с благодарностью.

Спасибо.

public class Profile
{
    ...
    [ObjectValidator(Tag = "HomeAddress")]
    public Address HomeAddress { get; set; }

    [ObjectValidator(Tag = "WorkAddress")]
    public Address WorkAddress { get; set; }
}
...
public class Address
{
    ...   
    [StringLengthValidator(1, 10)]
    public string City { get; set; }
}

1 Ответ

0 голосов
/ 03 марта 2009

В основном я создал собственный валидатор, который расширяет ObjectValidator и добавил поле _PropertyName, которое добавляется к ключам результатов проверки.

Так что теперь использование в примере, описанном выше, будет:

public class Profile
{
    ...
    [SuiteObjectValidator("HomeAddress")]
    public Address HomeAddress { get; set; }

    [SuiteObjectValidator("WorkAddress")]
    public Address WorkAddress { get; set; }
}

Класс валидатора:

public class SuiteObjectValidator : ObjectValidator
{
    private readonly string _PropertyName;

    public SuiteObjectValidator(string propertyName, Type targetType)
        : base(targetType)
    {
        _PropertyName = propertyName;
    }

    protected override void DoValidate(object objectToValidate, object currentTarget, string key,
                                       ValidationResults validationResults)
    {
        var results = new ValidationResults();

        base.DoValidate(objectToValidate, currentTarget, key, results);


        foreach (ValidationResult validationResult in results)
        {
            LogValidationResult(validationResults, validationResult.Message, validationResult.Target,
                                _PropertyName + "." + validationResult.Key);
        }
    }
}

И необходимый атрибут класса:

public class SuiteObjectValidatorAttribute : ValidatorAttribute
{
    public SuiteObjectValidatorAttribute()
    {
    }

    public SuiteObjectValidatorAttribute(string propertyName)
    {
        PropertyName = propertyName;
    }

    public string PropertyName { get; set; }

    protected override Validator DoCreateValidator(Type targetType)
    {
        var validator = new SuiteObjectValidator(PropertyName, targetType);
        return validator;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...