मैं सिर्फ अपने आप को इस में देख कर दिया है एकता और MVC 4.
का उपयोग कर क्या मैंने देखा है कि अगर आप उन्हें क्षणिक वस्तुओं के रूप में रहते हैं। FluentValidation मान्य होने वाली प्रत्येक संपत्ति के लिए एक नई सत्यापन वस्तु तैयार करेगा। तो कुछ कैशिंग की आवश्यकता है।
मेरे कैशिंग के लिए मैंने सत्यापनकर्ता के प्रति अनुरोध कैशिंग को देखा है। यह अच्छी तरह से काम करता है क्योंकि सभी निर्भर घटक प्रति अनुरोध हैं। (प्रति अनुरोध एक कस्टम कोड है जो HttpContext.Current.Items संग्रह पर एक HTTP मॉड्यूल के साथ संग्रह करता है जो अनुरोध के अंत में बाल कंटेनर को नष्ट/डिस्प्ले करता है)
प्रति अनुरोध और सिंगलटन इंस्टेंट्स के बीच चयन करने के लिए वैधकर्ता का यह पता चलता है कि इसका उपयोग कैसे किया जाता है और इसकी किस तरह की निर्भरताएं हैं और आईओसी कॉन्टिनर की क्षमताओं।
एकता के साथ आप एक सिंगलटन सत्यापनकर्ता बना सकते हैं और एक फ़ंक्शन यानी Func serviceFunc का उपयोग करके सेवा फैक्ट्री इंजेक्ट कर सकते हैं।
मेरे मामले में हर बार जब मैं सेवा कॉल करता हूं, यूनिटी चाइल्डकॉन्टरर सेवा 'पुनर्प्राप्त की जाती है। इस प्रकार मैं अभी भी एक कंटेनर नियंत्रक लाइफटाइम मैनेजर (सिंगलटन) के साथ परिभाषित 'सत्यापनकर्ता' रख सकता हूं और 'सेवा' को श्रेणीबद्ध लाइफटाइम मैनेजर (प्रति अनुरोध) के साथ परिभाषित किया गया है।
प्रत्येक बार सर्विसफंक को बुलाया जाता है, इसका एक नकारात्मक पक्ष यह है कि उसे बच्चे के कंटेनर से सेवा की जांच और पुनर्प्राप्ति की आवश्यकता होती है। यह सबसे संभावित कारण होगा कि मैं 'प्रति अनुरोध' पर वापस क्यों आऊंगा)
मैंने अभी सेवा का उपयोग करने के लिए अपना कोड अपडेट किया है और आज इसका परीक्षण करेंगे। मेरा मानना है कि यह आपके अनुप्रयोगों के लिए सही समाधान खोजने के लिए एक त्रुटि का परीक्षण करेगा। बजाय एकता कंटेनर का उपयोग कर (वेब पर सबसे उदाहरण करते हैं), मैं इस पर IDependencyResolver
इंजेक्शन लगाने कर रहा हूँ और मेरे सत्यापनकर्ता वस्तुओं को हल करने का उपयोग कर -
नीचे validtion कारखाने मैं उपयोग कर रहा हूँ है।
public class ValidatorFactory : IValidatorFactory
{
private readonly IDependencyResolver _dependencyResolver;
// taken from the attribute Validation factory
public ValidatorFactory(IDependencyResolver dependencyResolver)
{
_dependencyResolver = dependencyResolver;
}
/// <summary>
/// Gets a validator for the appropriate type.
///
/// </summary>
public IValidator<T> GetValidator<T>()
{
return (IValidator<T>)this.GetValidator(typeof(T));
}
/// <summary>
/// Gets a validator for the appropriate type.
///
/// </summary>
public virtual IValidator GetValidator(Type type)
{
if (type == (Type)null)
return (IValidator)null;
var validatorAttribute = (ValidatorAttribute)Attribute.GetCustomAttribute((MemberInfo)type, typeof(ValidatorAttribute));
if (validatorAttribute == null || validatorAttribute.ValidatorType == (Type) null)
{
return (IValidator) null;
}
else
{
return _dependencyResolver.GetService(validatorAttribute.ValidatorType) as IValidator;
}
}
}
धन्यवाद @ खालिद। मैं पूर्णतः सन्तुष्ट हुँ। आपकी प्रतिक्रिया के लिए –