Блок приложения проверки корпоративной библиотеки с наследованием

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

абстрактный класс A { public int fieldA; }

класс B:A { }

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

2 ответа

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

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

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

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

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

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

Будьте осторожны, чтобы не использовать 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>
Другие вопросы по тегам