2012-09-01 9 views
6

FluentValidation Validators को हल करने के लिए मुझे IComponentContext को ValidatorFactory प्रदान करने में सक्षम होना चाहिए। मैं थोड़ा फंस गया हूँ।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; 
     } 
    } 

रजिस्टर 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

संबंधित मुद्दे