1

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 の構成を適切にセットアップしましたか? どんな助けでも大歓迎です。

4

1 に答える 1

1

Application_Startでは、既存のカーネルを使用する代わりに、をNinjectValidatorFactory新しいStandardKernelもので更新します。そのため、既存のカーネルに登録したバリデーターは、によって検出されませんNinjectValidatorFactory

このコードブロックを既存のカーネルにアクセスできる場所に移動し、それを渡すと問題が解決するはずです。

于 2012-04-04T13:38:13.933 に答える