2

J'utilise le bloc d'application de validation de bibliothèque d'entreprise.Bloc d'application de validation de bibliothèque d'entreprise avec héritage

Résumé Classe A { public int fieldA; }

classe B: A {}

-je ajouter à validateurs type B. Je ne suis pas en mesure de trouver le terrain FieldA et aussi, même si j'entrer dans la configuration, la validation ne réussit pas . VAB ne prend-il pas en compte la classe abstraite et les propriétés ou champs hérités?

Répondre

2

J'ai fait un test et cela fonctionne bien pour les classes de base et les classes de base abstraites. Pouvez-vous poster votre configuration?

Veillez à ne pas utiliser le code XML de validation de propriété lorsque vous traitez des champs (et vice versa).

Sur la base de votre exemple ci-dessus, votre configuration devrait ressembler à:

<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> 
2

VAB supporte l'héritage que lorsque vous utilisez les attributs. L'héritage n'est pas pris en charge pour la validation basée sur la configuration (comme vous pouvez le lire dans la FAQ here). Le travail autour donné par l'équipe de EntLib est la suivante:

Pour contourner ce problème, vous pouvez répliquer la spécification de validation pour les sous-classes.

Bien sûr, ce travail est nul, car pour chaque changement dans une classe de base, vous devez éventuellement le copier dans de nombreux types dérivés. C'est cassant et sujet aux erreurs. Pour cette raison, j'ai construit une solution capable de dupliquer les validations des classes de base aux implémentations.

Il est juste trop de code pour l'afficher ici sur Stackoverflow, mais vous pouvez lire mon blog à ce sujet here.

J'espère que cela aide.