2012-12-05 19 views
6

मैंने हाल ही में निनजेक्ट और निनजेक्ट। वेब.एमवीसी को मौजूदा एएसपी.नेट एमवीसी 4 वेब एप्लिकेशन में जोड़ा। जब साइट ब्राउज़, मैं निम्नलिखित अपवाद प्राप्त करते हैं, मालूम होता है यादृच्छिक पर:यादृच्छिक रूप से होने वाली निंजा अपवाद: "निनजेक घटक आईसीएच लोड करने में त्रुटि"

[InvalidOperationException: लोड करने में त्रुटि Ninject घटक ICache नहीं इस तरह के घटक कर्नेल के घटक कंटेनर में पंजीकृत किया गया है।

सुझाव: 1) यदि आपने कर्नेलबेस के लिए कस्टम सबक्लास बनाया है, तो सुनिश्चित करें कि आपके पास ने एडकंपोनेंट्स() विधि लागू की है। 2) सुनिश्चित करें कि आपने कंटेनर से घटक को RemoveAll() पर कॉल से नहीं हटाया है। 3) सुनिश्चित करें कि आपने गलती से एक कर्नेल से अधिक नहीं बनाया है। ] Ninject.Components.ComponentContainer.Get (प्रकार घटक) C: \ परियोजनाओं \ Ninject \ Ninject \ src \ Ninject \ अवयव \ ComponentContainer.cs: 160 Ninject.Components.ComponentContainer.Get() C: \ प्रोजेक्ट \ Ninject \ ninject \ src \ Ninject \ घटक \ ComponentContainer.cs: 116 Ninject.Web.Common। <> सी में c__DisplayClass2.b__1 (IKernel कर्नेल) c: \ Projects \ Ninject \ Ninject.Web.Common \ src \ Ninject.Web.Common \ OnePerRequestHttpModule.cs: 74 निनजेक्ट। ग्लोबल कर्नेल पंजीकरण। मैपकर्नेल (एक्शन`1 एक्शन) में c: \ परियोजनाओं \ Ninject \ Ninject \ src \ Ninject \ GlobalKernelRegistration.cs: 75 Ninject.Web.Common.OnePerRequestHttpModule.DeactivateInstancesForCurrentHttpRequest() में c: \ परियोजनाओं \ Ninject \ Ninject.Web.Common \ src \ Ninject .Web.Common \ OnePerRequestHttpModule.cs: 74 Ninject.Web.Common.OnePerRequestHttpModule.b__0 (ऑब्जेक्ट ओ, EventArgs ई) सी में: \ Projects \ Ninject \ Ninject.Web.Common \ src \ Ninject.Web.Common \ OnePerRequestHttpModule.cs: 56 System.Web.SyncEventExecutionStep.Syst em.Web.HttpApplication.IExecutionStep.Execute() 136 System.Web.HttpApplication.ExecuteStep (IExecutionStep कदम है, बूलियन & completedSynchronously) +69

एक बार मैं अपवाद ऊपर मिल जाए, तो बस ताज़ा या वापस क्लिक करने लगता है साइट को सामान्य रूप से फिर से काम करना शुरू करने के लिए। ऐसा लगता है कि साइट का कोई भी क्षेत्र किसी अन्य से अधिक नहीं होता है।

यह मुद्दा यहां पूछे गए प्रश्न के समान है: Ninject + "Error loading Ninject component ICache"। हालांकि, उस प्रश्न का मुद्दा विस्तार के साथ एक बग के कारण होता है, जो एक वर्ष से अधिक पुराना है, और यह हल हो रहा है।

यह NinjectWebCommon.cs फ़ाइल में किसी भी संशोधन के बिना होता है, जो भी हो। (कोई मॉड्यूल लोड नहीं हुआ, कोई बाइंडिंग नहीं जोड़ा गया।) इसे रोकने के लिए मेरे लिए एकमात्र तरीका परियोजना से पूरी तरह से NinjectWebCommon.cs को बाहर करना है।

मुझे यकीन नहीं है कि अन्य जानकारी शामिल करने के लिए, जैसा कि मैंने Nuget संकुल को स्थापित करने के अलावा कुछ और किया है। शायद ध्यान देने योग्य यह है कि इस परियोजना में अन्य असेंबली के संदर्भ शामिल हैं जो डीआई के लिए निनजेक्ट का उपयोग करते हैं।

मैंने काफी हद तक देखा है और ऐसा होने के कारण नुकसान में हूं। किसी भी सुझाव के लिए बहुत आभार होगा।

+0

यह तब होता है जब किसी एमवीसी अनुप्रयोग में निनजेक्ट को सक्षम करने के लिए WebActivator और Global.asax.cs- आधारित विधियों का उपयोग किया जाता है। – UnhipGlint

उत्तर

4

स्पष्ट रूप से आपके आवेदन (एमवीसी + लिब्स) में कई कर्नेल शामिल हैं।एप्लिकेशन के रनटाइम के दौरान कर्नेल इंस्टेंस बनाना और डिस्पोजे करना कुछ ऐसा है जो टालना चाहिए। मैं दृढ़ता से सुझाव देता हूं कि आप अपना डिज़ाइन बदल दें ताकि आवेदन शुरू होने पर कुछ कर्नेल बनाए जा सकें। और बाद में कोई भी नहीं बनाया गया है (सभी libs सहित)।

ऐसा कहकर, मुझे कोड में कोई तरीका नहीं दिख रहा है कि यह समस्या निनजेक्ट के नवीनतम संस्करण के साथ कैसे हो सकती है। यह सत्यापित करने योग्य हो सकता है कि एप्लिकेशन और सभी पुस्तकालय निनजेक्ट के नवीनतम संस्करण पर हैं।

+0

मुझे लगता है कि हम निनजेक्ट का उपयोग करके पुस्तकालयों को संदर्भित करने की आवश्यकता को खत्म करने के लिए थोड़ा सा कोड दोबारा करने की कोशिश करने जा रहे हैं। मैं देखूंगा कि इसका क्या प्रभाव है और संस्करण संख्याओं को भी सत्यापित करें। – UnhipGlint

+0

निनजेक्ट का उपयोग करते हुए बाहरी असेंबली के संदर्भ को हटाने के बाद यह समस्या दूर हो गई है। उम्मीद है कि इसे साफ़ करता है, आपकी मदद के लिए धन्यवाद! – UnhipGlint