2012-09-01 4 views
6

FluentValidation Validators를 해결하기 위해 ValidatorFactoryIComponentContext을 제공 할 수 있어야합니다. 나는 조금 붙어있다.FluentValidation Autofac ValidatorFactory

ValidatorFactory

public class ValidatorFactory : ValidatorFactoryBase 
    { 
     private readonly IComponentContext context; 

     public ValidatorFactory(IComponentContext context) 
     { 
      this.context = context; 
     } 

     public override IValidator CreateInstance(Type validatorType) 
     { 
      return context.Resolve(validatorType) as IValidator; 
     } 
    } 

어떻게 문맥을 제공하고 나는이 알아 낸 ValidatorFactory

FluentValidation.Mvc.FluentValidationModelValidatorProvider.Configure(x => x.ValidatorFactory = new ValidatorFactory()); 

답변

0

를 등록 않습니다. ValidatorFactoryIComponentContext 일 경우 자동 입력이 자동으로 실행됩니다.

ValidatorFactory이

public class ValidatorFactory : ValidatorFactoryBase 
    { 
     private readonly IComponentContext context; 

     public ValidatorFactory(IComponentContext context) 
     { 
      this.context = context; 
     } 

     public override IValidator CreateInstance(Type validatorType) 
     { 
      return context.Resolve(validatorType) as IValidator; 
     } 
    } 

오히려 Autofac에 그것을 단단보다 ValidatorFactory

FluentValidation.Mvc.FluentValidationModelValidatorProvider.Configure(x => x.ValidatorFactory = new ValidatorFactory()); 
+3

답변에 올바른 코드를 입력하고 답변으로 표시해야합니다. –

+0

@ErikFunkenbusch 코드가 정확합니다. 나는 내 대답을 받아 들였다. – Sam

9

등록, 직접 그를 사용하여 모든 DependencyResolver에 일반적으로 적용 할 수 있습니다 :

public class ModelValidatorFactory : IValidatorFactory 
{ 
    public IValidator GetValidator(Type type) 
    { 
    if (type == null) 
    { 
     throw new ArgumentNullException("type"); 
    } 
    return DependencyResolver.Current.GetService(typeof(IValidator<>).MakeGenericType(type)) as IValidator; 
    } 

    public IValidator<T> GetValidator<T>() 
    { 
    return DependencyResolver.Current.GetService<IValidator<T>>(); 
    } 
} 

그러면 다음과 같이 유효성 검사기를 등록 할 수 있습니다. 모든 유형의 DependencyResolver은 강력한 형식의 IValidator<T>이며 항상 해결됩니다.

+0

니스! 나는 그것을 좋아한다. 나는 당신의 것을 나의 대답 대신에 나의 대답으로 표시했다. 감사 – Sam