Voici une façon de gérer ce problème ...
Controller ...
Public Class AdminController
Inherits System.Web.Mvc.Controller
Private _adminService as IAdminService
Public Sub New(adminService as IAdminService)
_adminService = adminService
'Initialize the services that use validation...
_adminService.Initialize(New ModelStateWrapper(Me.ModelState))
End Sub
...
End Class
service ...
Public Class AdminService
Implements IAdminService
Private _repository As IAdminRepository
Private _dictionary as IValidationDictionary
Public Sub New(repository as IAdminRepository)
_repository = repository
End Sub
Public Sub Initialize(dictionary As IValidationDictionary) Implements IAdminService.Initialize
_dictionary = dictionary
End Sub
...
End Class
Wrapper Interface ...
Public Interface IValidationDictionary
ReadOnly Property IsValid() As Boolean
Sub AddError(Key as String, errorMessage as String)
End Interface
Implémentation de wrapper ... L'utilisation de ModelStateWrapper permet aux classes de service d'être faiblement couplées à MVC. Bien que, nous ayons un couplage serré entre l'AdminController et le ModelStateWrapper en raison de l'instruction New, mais je m'en fous parce que l'état du modèle est MVC spécifique de toute façon. En faisant cela, vous n'auriez pas besoin d'enregistrer ModelStateWrapper ou ModelState avec StructureMap.
Dans vos tests unitaires, vous pouvez appeler la méthode Initialize sur le service après avoir créé le contrôleur pour passer dans l'état de votre modèle de test et vérifier les erreurs de validation.
Je sais que vous aviez dit que vous utilisiez un ModelStateWrapper, mais je voulais juste ajouter un exemple plus complet qui pourrait aider les autres ...
Pouvez-vous préciser où le ModelState vient? Si vous n'utilisiez pas de conteneur, comment transmettriez-vous l'instance ModelState au service? –