我正在尝试使用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());