||Memo|| Ответов: 2

C# --fluentvalidation | system.invalidcastexception


Привет, ребята, у меня есть проблема с FluentValidation. Я принимаю эту ошибку, когда запускаю приложение:
System.InvalidCastException: 'Unable to cast object of type 'DevFramework.Northwind.Entities.Concrete.Product' to type 'FluentValidation.IValidationContext'.'


Сломанной Код Проверки Свободно :

using FluentValidation;



namespace DevFramework.Core.CrossCuttingConcerns.Validation.FluentValidation
{
    public class ValidatorTool
    {
        
        public static void FluentValidate(IValidator validator, object entity)
        {
            var result = validator.Validate((IValidationContext)entity);
            if (result.Errors.Count > 0)
            {
                throw new ValidationException(result.Errors);
            }
        }
    }
}


-----------------------------------------------------------------------
FluentValidationAspect(я использую postsharp), который я использовал для:
[FluentValidationAspect(typeof(ProductValidator))]
[CacheRemoveAspect(typeof(MemoryCacheManager))]
[LogAspect(typeof(FileLogger))]
public Product Add(Product product)
{

    return _productDal.Add(product);
}



Спасибо!

Что я уже пробовал:

Я уже пробовал этот код:
public class ValidatorTool
    {
        
        public static void FluentValidate(IValidator validator, object entity)
        {
            var result = validator.Validate(entity);
            if (result.Errors.Count > 0)
            {
                throw new ValidationException(result.Errors);
            }
        }
    }


и я принял эту ошибку:
cannot convert from 'object' to 'FluentValidation.IValidationContext'  DevFramework.Core   17  Active

Member 14637786

Можете ли вы показать класс ProductValidator?

||Memo||

публичный класс ProductValidator:AbstractValidator<product>
{
общественные ProductValidator()
{
Взяли ее за правило для(Р =&ГТ; п.Кодтипа).NotEmpty().WithMessage("идентификатор категории не может быть пустым");
Взяли ее за правило для(Р =&ГТ; п."Марка").NotEmpty().WithMessage("название продукта не может быть пустым");
Взяли ее за правило для(Р =&ГТ; п."Цена").GreaterThan(0).WithMessage("цена единицы измерения не может быть пустой и должна быть больше 0");
Взяли ее за правило для(Р =&ГТ; п.QuantityPerUnit).NotEmpty().WithMessage("идентификатор категории не может быть пустым");
Взяли ее за правило для(Р =&ГТ; п."Марка").Длина(2, 20).WithMessage("длина названия продукта должна быть между 2 и 20");
Взяли ее за правило для(Р =&ГТ; п."Цена").GreaterThan(20).When(p => p.CategoryID == 1).WithMessage("цены не могут быть ниже 20 для члена этой категории");

}

BillWoodruff

Вы, похоже, используете фреймворк, который больше не поддерживается; их веб-сайт не имеет контента.

||Memo||

Я использую EntityFramework. Приложение работает, но FluentValidation работает неправильно. Я могу вернуть get all метод.

BillWoodruff

Ваш код показывает ошибку в DevFrameWork.

||Memo||

Извините, я дал это имя своей программе :D не фреймворк, а просто название.

2 Ответов

Рейтинг:
2

Richard Deeming

Сообщение об ошибке совершенно ясно - ваш Product класс не реализует IValidationContext интерфейс. Похоже, что вы передаете неверное значение своему ValidatorTool.FluentValidate метод.

Похоже, это тот же самый код, который был размещен в репо GitHub еще в 2018 году:
Validate method is throwing exception · Issue #763 · FluentValidation/FluentValidation · GitHub[^]


||Memo||

Спасибо, Чувак, я задал Джереми свой вопрос. И он только что ответил. Я поделюсь решением этой проблемы

Рейтинг:
10

||Memo||

Ребята, я нашел решение.

public class ValidatorTool
    {
        
        public static void FluentValidate(IValidator validator, object entity)
        {
            var context = new ValidationContext<object>(entity);
            var result = validator.Validate(context); 
            if (result.Errors.Count > 0)
            {
                throw new ValidationException(result.Errors);
            }
        }
    }

FluentValidation удалила Непатентованную перегрузку проверки для обеспечения безопасности с обновлением 9.0.
Вот ссылка на обновление 9.0 руководство по обновлению — документация FluentValidation[^]