sur mon projet ASP.NET MVC 3, j'ai mis en place le motif de référentiel dans un projet de bibliothèque de classe séparé.
J'utilise aussi EF comme or. J'ai également mis en place une certaine validation de modèle avec Comme vous le voyez, à partir de maintenant, mon modèle entièrement étroitement couplé parce que j'ai utilisé Quelle est la façon de faire ce droit afin que mon modèle puisse être, bien, (pas sûr s'il s'agit du mot juste) faux em> fort > Pour les tests d'unités? p> p> interface code>. Voici comment il ressemble à: p>
AccommetPropertysononceRédiodaliasrepository code> classe directement Au lieu d'utiliser
IACCOMMPROPERTYSONSONEPERIODALIASREPOSITOIREL code>. P>
3 Réponses :
La contrainte de la sélicité est en dehors du champ d'application de cette entité. Vous devez valider cette contrainte lors de l'ajout d'une nouvelle entité, de l'extérieur. Cette validation ne devrait pas appartenir à l'entité elle-même. Cela dépend du contexte de l'entité, et non seulement sur cette entité seule. P>
Donc, vous dites qu'il n'y a aucun moyen d'injecter le référentiel dans cette lunette?
Je valide également le caractère unique de la valeur dans ma base de données avec une contrainte unique et que mon application n'a aucun moyen d'insérer les mêmes données à mon DB, mais mon objectif ici est de fournir de bons commentaires à l'utilisateur ce qui s'est mal passé.
Je suppose que vous pourriez utiliser une injection de propriété ( social.msdn.microsoft.com/forums/en-ca/adodototentityframew ork / ... ). Mais c'est une mauvaise chose à faire, votre entité ne doit pas dépendre du référentiel du tout.
La logique de validation peut être injectée à l'aide du résolveur intégré de MVC. P>
Voir l'utilisation avec le modelvalidatorProvider qui est résolu à l'aide du conteneur enregistré en MVC. P>
ASP .NET MVC 3: Validation du modèle Lorsque des informations externes au modèle sont nécessaires p>
Totalement ce que je cherchais. Merci beaucoup!
Vous pouvez utiliser la méthode C'est un modèle de localisation de service, mais beaucoup plus simple que des implémentations plus complexes utilisant gettervice (type ServiceType) code> sur
validationContext code> - voir ici: https://docs.microsoft.com/en-us/dotnet/api/system .commonentmodel.data -Anotations.ValidationContext.GetService? View = Net-5.0 # System_ComponentModel_Dataannotations_ValidationContext_GetService_System_type _ P>
dataannotationsModelvalidator code>. Parfois, l'inconvénient d'une solution simple (utilisant un motif de servicelocator) l'emporte sur le coût d'un complexe One OMI. P>