【发布时间】:2017-02-20 08:24:59
【问题描述】:
在我正在工作的 MVC 项目中,我使用 Fluent Validation 来实现一些验证逻辑,我将UnityValidatorFactory 定义如下:
public class UnityValidatorFactory : ValidatorFactoryBase
{
private readonly IUnityContainer _container;
public UnityValidatorFactory(IUnityContainer container)
{
_container = container;
}
public override IValidator CreateInstance(Type validatorType)
{
if (_container.IsRegistered(validatorType))
{
return _container.Resolve(validatorType) as IValidator;
}
return null;
}
}
在 global.asax 中,我像这样注册我的课程:
var validationFactory = new UnityValidatorFactory(container);
var fluentValidationModelValidatorProvider = new FluentValidationModelValidatorProvider(validationFactory);
我为我的视图模型定义了我的验证器:
public class ServiceRequestViewModelValidator : AbstractValidator<ServiceRequestViewModel>
{
public ServiceRequestViewModelValidator()
{
// many validation rules here...
}
}
我统一注册我的验证器:
container.RegisterType<IValidator<ServiceRequestViewModel>, ServiceRequestViewModelValidator>();
当我使用 ServiceRequestViewModel 类型的参数将数据发布到操作时,CreateInstance 方法被调用了很多次,并且 ServiceRequestViewModelValidator 的构造函数也是如此。 因为我实施的验证规则非常耗时,所以我不会将它们执行一次以上。此外,我不明白为什么他们不止一次被调用。
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-4 fluentvalidation