Я нашел эту документацию, которая на самом деле то, что я ищу, но у меня есть некоторые проблемы с ней: 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]) {
}