我试图将控制器的ModelState注入我的服务层以添加与业务逻辑相关的验证错误(例如,条目已经存在).
为此,我创建了一个新的IValidationDictionary,它通过Initialize()函数注入我的服务.没有什么新东西可以通过我的谷歌搜索来判断一些人在MVC中所做的事情.
Controller构造函数如下所示:
public AccountController(IAccountService accountService)
{
_accountService = accountService;
_accountService.Initialize(new ValidationDictionary(ModelState));
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,我可以在我的服务中添加错误.再次离开服务时出现问题.此时,控制器ModelState中没有出现任何错误.经过一些调试后,我发现控制器构造函数中的ModelState与Action中的不同.在某些时候,它似乎创建了一个新的ModelState.
一种替代方案似乎是调用Initialize()在每个Action的开头注入ModelState.在我这样做之前,我想问一下是否有人有一种更优雅的方式(如在更少的类型中)解决这个问题.
编辑:IValidationDictionary:在商务层:
public interface IValidationDictionary
{
void AddError(string key, string message);
bool IsValid { get; }
}
Run Code Online (Sandbox Code Playgroud)
在控制器中:
public class ValidationDictionary : IValidationDictionary
{
private ModelStateDictionary _modelState;
public ValidationDictionary(ModelStateDictionary modelState)
{
_modelState = modelState;
}
public bool IsValid
{
get
{
return _modelState.IsValid;
}
}
public void AddError(string key, string message)
{
_modelState.AddModelError(key, message);
}
}
Run Code Online (Sandbox Code Playgroud)