NinjectValidatorFactory正在创建验证器的多个实例

时间:2015-06-19 15:47:52

标签: asp.net-mvc ninject fluentvalidation ninject.web.mvc

我正在尝试使用Ninject FluentValidation并且遇到一个奇怪的问题 - 当我提交表单时,验证器的构造函数被称为32(!)次。如果我删除配置,构造函数只调用一次(但当然不会发生注入)。我唯一能想到的是我应该在NinjectWebCommon以外的地方设置工厂,但是我没有看到其他任何我可以访问内核的地方。

为什么验证者会多次开火?

在NinjectWebCommon.cs中的RegisterServices()中:

NinjectValidatorFactory ninjectValidatorFactory = new NinjectValidatorFactory(kernel);
FluentValidationModelValidatorProvider.Configure(provider => provider.ValidatorFactory = ninjectValidatorFactory);
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

在验证解析器中:

AssemblyScanner.FindValidatorsInAssemblyContaining<CleanupSiteValidator>()
            .ForEach(match => Bind(match.InterfaceType).To(match.ValidatorType));
编辑:我向解析器添加了InRequestScope(),验证器的构造函数现在只触发一次,但CreateInstance()中的NinjectValidatorFactory.cs仍然触发了32次。我想这是......更好,但工厂应该多次调用吗?似乎还有一些问题。

AssemblyScanner.FindValidatorsInAssemblyContaining<CleanupSiteValidator>()
            .ForEach(match => Bind(match.InterfaceType).To(match.ValidatorType).InRequestScope());

0 个答案:

没有答案