Блок приложения проверки корпоративной библиотеки с наследованием
Я использую блок приложения проверки библиотеки 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>