asv.net core mvc 2.2 валидация с сервисным уровнем - PullRequest
1 голос
/ 11 марта 2019

Я нашел эту документацию, которая на самом деле то, что я ищу, но у меня есть некоторые проблемы с ней: https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/models-data/validating-with-a-service-layer-cs

При отделении сервисного уровня код на веб-сайте делает это:

        public ProductController() 
        {
            _service = new ProductService(new ModelStateWrapper(this.ModelState), new ProductRepository());
        }

Когда я пытаюсь перевести это на мой основной проект mvc 2.2 asp.net с сервисом, у меня есть:

// ctor from service
  public ProductService(IProductRepository repo, IValidationDictionary validationDictionary) : IProductService {
 // ...
}

// ctor from controller
public ProductController(IProductService service) {

}


  public class ModelStateWrapper : IValidationDictionary
  {
    private ModelStateDictionary _ModelState;

    public ModelStateWrapper(ModelStateDictionary modelState)
    {
      _ModelState = modelState;
    }

    #region IValidationDictionary members

    public bool IsValid => _ModelState.IsValid;

    public void AddError(string key, string errorMessage)
    {
      _ModelState.AddModelError(key, errorMessage);
    }

    #endregion
  }

У меня проблема в том, что я не могу внедрить IValidationDictionaryПараметр validationDictionary.

Теперь мне нужно вручную передавать параметр new ModelStateWrapper (this.ModelState) каждый раз, когда я вызываю метод из службы, требующей проверки.(не может быть установлен один раз из-за асинхронных методов обслуживания)

Это что-то, что можно решить?Мне нравится идея проверки в службе.

Если бы я мог выяснить, как передать параметр объекта во вновь созданный экземпляр, это было бы здорово:

// ctor from controller
public ProductController(IProductService service[use this.ModelState here and pass it to the constructor of the service]) {

}
...