मैं नेट एमवीसी 3 के साथ ऑटोफैक का उपयोग कर रहा हूं। ऐसा लगता है कि ऑटोफैक एप्लिकेशन_इंडरक्वैस्ट में जीवनकाल के दायरे का निपटान करता है, जो समझ में आता है। लेकिन उस जिसके कारण त्रुटि जब मैं अपने खुद के कोड में एक सेवा है जो EndRequest दौरान कार्यान्वित खोजने की कोशिश:मैं EndRequest में ऑटोफैक का उपयोग कैसे कर सकता हूं?
public T GetInstance<T>()
{
return DependencyResolver.Current.GetService<T>();
}
:
MESSAGE: Instances cannot be resolved and nested lifetimes cannot be created from this LifetimeScope as it has already been disposed.
STACKTRACE: System.ObjectDisposedException
at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(IComponentRegistration registration, IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable`1 parameters)
at System.Web.Mvc.DependencyResolverExtensions.GetService[TService](IDependencyResolver resolver)
संदर्भ के लिए, कोड मैं सेवाओं हल करने का प्रयास करने के लिए उपयोग कर रहा हूँ है
क्या कोई तरीका है कि मेरे पास एंड्रॉक्वेस्ट से निष्पादित कोड हो सकता है, सेवा समाधान के लिए ऑटोफैक का लाभ उठाएं?
संपादित करें: मैंने एंड्रॉवेस्ट के दौरान बस एक अलग दायरे के साथ ऐसा करने का विचार किया, जैसा कि जिम नीचे सुझाता है। हालांकि, इसका मतलब है कि InstancePerHttpRequest
के रूप में पंजीकृत कोई भी सेवा EndRequest के दौरान एक नया उदाहरण प्राप्त करेगी, जो गैर-आदर्श लगता है।
ऊपर मेरे संपादन देखें। यह काम करता है, लेकिन आदर्श रूप से मैं अपने कोड को एंड्रॉवेस्ट में अपने अन्य कोड के समान जीवनकाल के दायरे में रखना चाहता हूं, ताकि 'InstancePerHttpRequest' अपेक्षा के अनुसार काम करे। – eliah
फिर आपको एंड्रॉक्वेट से पहले अपना कोड चलाने के लिए या किसी भी तरह ऑटोफैक में सीधे हुक करना होगा ताकि आप ऑटोफैक लपेटने से पहले अपने कोड को फायर कर सकें। –