Блок приложения проверки корпоративной библиотеки с наследованием - PullRequest
2 голосов
/ 25 июня 2010

Я использую блок приложения проверки библиотеки Enterprise.

реферат класса А { public int fieldA; }

класс B: A { }

Я добавляю валидаторы к типу B. Я не могу найти поле fieldA, и даже если я ввожу его в конфигурацию, проверка не будет успешной. Разве VAB не учитывает абстрактный класс и унаследованные свойства или поля?

Ответы [ 2 ]

2 голосов
/ 29 июня 2010

VAB поддерживает наследование только при использовании атрибутов. Наследование не поддерживается для проверки конфигурации (как вы можете прочитать в FAQ здесь ). Обход, предоставленный командой entlib, таков:

Чтобы обойти эту проблему, вы можете повторить спецификацию валидации для подклассов.

Конечно, это обходной путь, потому что для каждого изменения в базовом классе вам, возможно, придется скопировать его во многие производные типы. Это хрупко и подвержено ошибкам. Из-за этого я построил решение, которое может дублировать проверки от базовых классов до реализаций.

Это слишком много кода, чтобы разместить его здесь, в Stackoverflow, но вы можете прочитать об этом в моем блоге здесь .

Надеюсь, это поможет.

2 голосов
/ 26 июня 2010

Я сделал тест, и он отлично работает для базовых классов и абстрактных базовых классов.Вы можете опубликовать свою конфигурацию?

Будьте осторожны, чтобы не использовать XML проверки свойств при работе с полями (и наоборот).

Исходя из приведенного выше примера ваша конфигурация должна выглядеть следующим образом:

  <validation>
    <type assemblyName="MyProject.Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
      name="MyProject.Test.B">
      <ruleset name="RuleSetB">
        <fields>
          <field name="fieldA">
            <validator lowerBound="1" lowerBoundType="Inclusive" upperBound="100"
              upperBoundType="Inclusive" negated="false" messageTemplate="fieldA must be between 1 and 100"
              messageTemplateResourceName="" messageTemplateResourceType=""
              tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.RangeValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null"
              name="Range Validator" />
          </field>
        </fields>
      </ruleset>
    </type>
  </validation>
...