2012-04-04 3 views
1

FluentValidation과 Ninject를 사용하고 있습니다.FluentValidation + Ninject : 의존성 주입을 위해 AbstractValidator를 설정하는 방법

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

    } 

private static void RegisterServices(IKernel kernel) 
    { 
     AssemblyScanner.FindValidatorsInAssembly(Assembly.GetExecutingAssembly()) 
.ForEach(match => kernel.Bind(match.InterfaceType) 
    .To(match.ValidatorType)); 

     kernel.Bind<IUserService>().To<UserService>(); 

    } 
NinjectWebCommon.cs

에서 내 global.asax.cs에서

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



    } 
} 

을 : 나는 AbstractValidator

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

    public string FirstName { get; set; }  

} 

에 내 유효성 검사를 위해 서비스를 주입하는 것을 시도하고있다

프로젝트 compi 레는 괜찮아. DI를 사용하려고하지 않을 때 유효성 검사도 잘 작동했습니다. 이제 IUserService를 주입하려고 했으므로 유효성 검사가 호출되지 않습니다.

ninject.web.mvc.fluentvalidation의 구성을 올바르게 설정 했습니까? 어떤 도움이라도 대단히 감사하겠습니다.

답변

1

Application_Start에서 기존 커널을 ​​사용하는 대신 NinjectValidatorFactory을 새로 StandardKernel으로 새로 작성합니다. 따라서 기존 커널에 등록한 유효성 검사기는 NinjectValidatorFactory에서 찾을 수 없습니다.

이 코드 블록을 기존 커널에 액세스 할 수있는 곳으로 옮기고이를 전달하면 문제를 해결할 수 있습니다.