2012-09-01 33 views
6

我需要能夠提供IComponentContext到我的ValidatorFactory來解析FluentValidation驗證器。我有點卡住了。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

我想通了這一點。如果您有ValidatorFactory則需要IComponentContext,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