FluentValidation + Ninject:如何为依赖注入设置AbstractValidator

时间:2012-04-04 10:24:51

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

我正在使用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的配置?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在您的Application_Start中,您使用新的NinjectValidatorFactory新建StandardKernel而不是使用现有内核 - 因此{{1}找不到您在现有内核上注册的验证程序}}

将此代码块移动到您可以访问现有内核并将其传入的位置可以解决问题。