2012-09-01 5 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とすると、Autofacはそれを自動的に挿入します。

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()); 
+3

答えに正しいコードを入力し、回答としてマークする必要があります。 –

+0

@ErikFunkenbuschコードは正しいです。私は私の答えを受け入れました。 – Sam

9

よりもむしろAutofacにそれ堅くカップルを登録するには、直接これを使って、任意の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