2012-04-04 5 views
1

私はFluentValidationとNinjectを使用しています。私はAbstractValidatorFluentValidation + Ninject:依存性注入のためのAbstractValidatorの設定方法

[Validator(typeof(CompetitionFormModelValidator))] 
public class CompetitionFormModel 
{ 

    public string FirstName { get; set; }  

} 

、私の検証のためにサービスを注入しようとしています: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>(); 

    } 

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);    

    } 

プロジェクトcompi丁度良い。私がDIを使用しようとしていない時、検証はうまくいっていました。 IUserServiceを注入しようとしているので、検証は呼び出されません。

ninject.web.mvc.fluentvalidationの設定を正しく設定しましたか?どんな助けでも大歓迎です。

答えて

1

Application_Startでは、既存のカーネルを使用する代わりに、NinjectValidatorFactoryを新しいStandardKernelで新規に作成します。したがって、既存のカーネルに登録したバリデータはNinjectValidatorFactoryによって見つかりません。

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