我正在使用FluentValidation和Ninject。我正在尝试将服务注入AbstractValidator
[Validator(typeof(CompetitionFormModelValidator))]
public class CompetitionFormModel
{
public string FirstName { get; set; }
}
我的验证:
public class CompetitionFormModelValidator : AbstractValidator<CompetitionFormModel>
{
IUserService UserService;
public CompetitionFormModelValidator(IUserService UserService)
{
this.UserService= UserService;
RuleFor(c => c.FirstName).NotEmpty().WithMessage(" ").Length(1, 100);
Custom(c =>
{
//.. try uusing UserService here
return null;
});
}
}
在我的global.asax.cs
中protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
var ninjectValidatorFactory = new NinjectValidatorFactory(new StandardKernel());
ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(ninjectValidatorFactory));
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
FluentValidationModelValidatorProvider.Configure(x => x.ValidatorFactory = ninjectValidatorFactory);
}
在NinjectWebCommon.cs
中private static void RegisterServices(IKernel kernel)
{
AssemblyScanner.FindValidatorsInAssembly(Assembly.GetExecutingAssembly())
.ForEach(match => kernel.Bind(match.InterfaceType)
.To(match.ValidatorType));
kernel.Bind<IUserService>().To<UserService>();
}
该项目编译得很好。当我没有尝试使用DI时,验证工作也很好。现在我正在尝试注入IUserService,不会调用验证。
我是否正确设置了ninject.web.mvc.fluentvalidation的配置?任何帮助将不胜感激。
答案 0 :(得分:1)
在您的Application_Start中,您使用新的NinjectValidatorFactory
新建StandardKernel
而不是使用现有内核 - 因此{{1}找不到您在现有内核上注册的验证程序}}
将此代码块移动到您可以访问现有内核并将其传入的位置可以解决问题。