2012-09-01 21 views
6

FluentValidation Validators'ı çözümlemek için IComponentContext benim ValidatorFactory'a ulaşabilmem gerekir. Biraz sıkışmışım.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; 
     } 
    } 

nasıl bağlam sağlayan ve bu anladım ValidatorFactory

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

cevap

0

kayıt yoktur. ValidatorFactoryIComponentContext numaralı telefonu alırsanız, Autofac bunu otomatik olarak enjekte eder.

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

Aksine AutoFac için sıkıca çift daha ValidatorFactory

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

Doğru kodu yanıtınıza vermeli ve yanıt olarak da işaretlemelisiniz. –

+0

@ErikFunkenbusch Kod doğru. Cevabımı kabul ettim. – Sam

9

Kayıt, doğrudan o kullanarak herhangi DependencyResolver için genellikle uygulanabilir yapabilirsiniz:

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

Ardından, doğrulayıcılarınızı DependencyResolver türünde, güçlü bir şekilde yazılan IValidator<T> ve her zaman çözülecektir.

+0

Güzel! Bunu beğendim ... Seninkini sadece benim için cevap olarak işaretledim. Teşekkürler – Sam