我们正在Web API中使用流畅的验证。
端点在几个地方接受具有string[]
类型的属性的视图模型。
我有一个问题,每当我们使用这些端点之一时,如果字符串数组包含任何元素,流利的验证就会从验证工厂(基于DI)中请求一个IValidator<string>
。因此,似乎流利的验证似乎希望将IValidator<string>
用作集合验证器。
我们没有定义IValidator<string>
,所以我们从DI容器中获得了一个组件未找到异常。我们也不需要为单个字符串定义验证器。
为什么非流水线验证不要求普通字符串属性,却要求IValidator<string>
用于字符串集合?我可以告诉你不要吗?
最佳答案
为什么流利的验证要求IValidator进行字符串收集
没有看到您的验证配置很难说,但是我想这是因为FluentValidation试图解析存储在您的集合中的类型(在这种情况下为字符串)。
就FluentValidation和您的IoC容器而言,类型就是类型-这就是您的IoC容器尝试解析IValidator<string>
实例的原因。
我可以告诉你不要吗?
您可以通过检查Evgeny Levin(在下面复制)建议的ValidatorFactory内的类型来告诉它不要这样做。
public class ServiceLocatorValidatorFactory : ValidatorFactoryBase
{
public override IValidator CreateInstance(Type validatorType)
{
if (validatorType == typeof(string))
return null;
...
}
}
另外,您可以让您的IoC容器尝试解决它,如果无法使用
TryGetInstance()
之类的方法(在此实例中使用StructureMap)解决依赖关系,则返回null。public override IValidator CreateInstance(Type validatorType)
{
return this.serviceLocator.GetInstance(validatorType) as IValidator;
}
关于c# - FluentValidation正在请求IValidator <string>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26936040/