6
votes

Support d'injection d'injection d'ivenidatableObject et de dépendance

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 interface . Voici comment il ressemble à: xxx

Comme vous le voyez, à partir de maintenant, mon modèle entièrement étroitement couplé parce que j'ai utilisé AccommetPropertysononceRédiodaliasrepository classe directement Au lieu d'utiliser IACCOMMPROPERTYSONSONEPERIODALIASREPOSITOIREL .

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 Pour les tests d'unités?


0 commentaires

3 Réponses :


4
votes

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.


3 commentaires

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.



4
votes

La logique de validation peut être injectée à l'aide du résolveur intégré de MVC.

Voir l'utilisation avec le modelvalidatorProvider qui est résolu à l'aide du conteneur enregistré en MVC.

ASP .NET MVC 3: Validation du modèle Lorsque des informations externes au modèle sont nécessaires


1 commentaires

Totalement ce que je cherchais. Merci beaucoup!



1
votes

Vous pouvez utiliser la méthode gettervice (type ServiceType) sur validationContext - 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 _

C'est un modèle de localisation de service, mais beaucoup plus simple que des implémentations plus complexes utilisant dataannotationsModelvalidator . Parfois, l'inconvénient d'une solution simple (utilisant un motif de servicelocator) l'emporte sur le coût d'un complexe One OMI.


0 commentaires