Вот один из способов решения этой проблемы ...
Контроллер ...
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 ...
Public Interface IValidationDictionary
ReadOnly Property IsValid() As Boolean
Sub AddError(Key as String, errorMessage as String)
End Interface
Реализация оболочки ...
Public Class ModelStateWrapper
Implements IValidationDictionary
Private _modelState as ModelStateDictionary
Public ReadOnly Property IsValid() As Boolean Implements IValidationDictionary.IsValid
Get
Return _modelState.IsValid
End Get
End Property
Public Sub New(modelState as ModelStateDictionary)
_modelState = modelState
End Sub
Public Sub AddError(key as string, errorMessage as string) Implements IValidationDictionary.AddError
_modelState.AddModelError(key, errorMessage)
End Class
Использование ModelStateWrapper позволяет слабо связывать классы обслуживания с MVC. Хотя у нас есть тесная связь между AdminController и ModelStateWrapper из-за оператора New, но мне все равно, потому что состояние модели в любом случае зависит от MVC. При этом вам не нужно будет регистрировать ModelStateWrapper или ModelState в StructureMap.
В своих модульных тестах вы могли вызвать метод Initialize службы после создания контроллера, чтобы передать состояние модели тестирования и проверить ошибки проверки.
Я знаю, что вы сказали, что используете ModelStateWrapper, но просто хотели добавить более полный пример, который может помочь другим ...