小编Mat*_*391的帖子

将ModelState注入服务

我试图将控制器的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)

c# asp.net-core-mvc asp.net-core

4
推荐指数
2
解决办法
2873
查看次数

标签 统计

asp.net-core ×1

asp.net-core-mvc ×1

c# ×1