【发布时间】:2016-11-04 15:18:47
【问题描述】:
我正在尝试将控制器的 ModelState 注入到我的服务层中,以添加与业务逻辑相关的验证错误(例如条目已存在)。
为此,我创建了一个新的 IValidationDictionary,它通过 Initialize() 函数注入到我的服务中。根本没有什么新鲜事,从我的谷歌搜索来看,有些人在 MVC 中所做的事情。
Controller 构造函数如下所示:
public AccountController(IAccountService accountService)
{
_accountService = accountService;
_accountService.Initialize(new ValidationDictionary(ModelState));
}
这一切都很好,我可以在我的服务中添加错误。再次离开服务时出现问题。那时,控制器 ModelState 中不存在我的任何错误。经过一番调试,我发现控制器的构造函数中的ModelState与Action中的不一样。在某些时候,它似乎创建了一个新的 ModelState。
另一种选择似乎是调用 Initialize() 在每个动作开始时注入 ModelState。在我这样做之前,我想问一下是否有人有更优雅的方式(比如更少的类型)来解决这个问题。
编辑: IValidationDictionary: 在业务层:
public interface IValidationDictionary
{
void AddError(string key, string message);
bool IsValid { get; }
}
在控制器中:
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);
}
}
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc