валидатор объекта блока приложения валидации не работает с наборами правил - PullRequest
2 голосов
/ 19 ноября 2009

Я боролся с этой проблемой, которая, как я первоначально думал, могла быть связана с полиморфизмом / наследованием, влияющим на мою проверку, но я сузил его до этого ...

Вот структура класса ..

public class Employee {

    [ObjectValidator(Ruleset = "A")]
    public EmployeeName Name { get; set; }

    public Employee()
    {
        Name = new EmployeeName();
    }
}

public class EmployeeName
{
    [StringLengthValidator(1,20,Ruleset = "A")]
    public string First { get; set; }

    public string Last { get; set; }

    public EmployeeName()
    {
        First = string.Empty;
        Last = string.Empty;
    }
}

Тест:

[TestFixture]
public class ObjectValidationWithRulesets
{
    [Test]
    public void wont_validate_with_a_ruleset()
    {
        var person = new Employee()
        {
            Name = new EmployeeName()
            {
                First = string.Empty, 
                Last = string.Empty
            }
        };

        var ruleSetValidator =
            ValidationFactory.CreateValidator<Employee>("A");

        var validationResults = ruleSetValidator.Validate(person);

        Assert.That(!validationResults.IsValid,
            "Validation with rulsets failed");
    }
}

Этот тест проходит, если я удаляю удалить набор правил. Но как только набор правил будет применен, я не смогу правильно проверить объект.

Кто-нибудь может пролить свет на это?

Приветствия

1 Ответ

2 голосов
/ 12 августа 2010

У меня тоже была эта проблема, но я не определил targetRuleSet в файле конфигурации. Я исправил проблему, исправив способ объявления атрибута ObjectValidator. Правильный синтаксис, который работал для меня, следующий:

// Correct
[ObjectValidator("RuleSetA", Ruleset = "RuleSetA")]

В своем коде я ошибочно объявил его следующим образом

// Wrong syntax
[ObjectValidator(Ruleset = "RuleSetA")]
...