使用FluentValidation遇对象转换错误:无法将object转为IValidationContext
解决“无法将object类型转换为FluentValidation.IValidationContext”错误
问题原因
你使用的非泛型IValidator接口,其Validate方法仅接受IValidationContext类型参数,直接传入object类型的entity会触发类型转换不匹配错误。
解决方案一:使用泛型IValidator<T>(推荐)
改用泛型接口实现类型安全的验证,代码如下:
namespace Northwind.Business.Utilities { public static class ValidationTool { public static void Validate<T>(IValidator<T> validator, T entity) { var result = validator.Validate(entity); if (result.Errors.Any()) { throw new ValidationException(result.Errors); } } } }
泛型版本的IValidator<T>原生支持接收对应类型的实体参数,无需额外类型转换,同时能在编译阶段检查类型匹配,避免运行时错误。
解决方案二:手动包装为ValidationContext(兼容非泛型场景)
如果必须保留object参数,可通过ValidationContext<object>包装实体对象,适配非泛型IValidator的参数要求:
namespace Northwind.Business.Utilities { public static class ValidationTool { public static void Validate(IValidator validator, object entity) { var context = new ValidationContext<object>(entity); var result = validator.Validate(context); if (result.Errors.Any()) { throw new ValidationException(result.Errors); } } } }
内容的提问来源于stack exchange,提问作者Eymen Efe Altun
相关产品推荐
相关产品推荐

