2011-03-09 5 views
9

मैं निनजेक्ट और एनएचबेर्नेट के साथ एएसपी.नेट एमवीसी 3 का उपयोग कर रहा हूं।निनजेक्ट कॉल एनएचबीरनेट आइसल का निपटान और बंद करेगा?

जब डि के बारे में सोच, मैं एक है जो संसाधन प्राप्त भी इसे बंद करना सुनिश्चित करता है लगता है (इस मामले में Ninject जिम्मेदार होना चाहिए)

लेकिन मुझे यकीन है कि कैसे काम करता है जब Ninject InRequestScope का उपयोग नहीं कर रहा हूँ।

मेरे कोड है:

Bind<ISession>().ToMethod(context => context.Kernel.Get<ISessionFactory>().OpenSession()).InRequestScope(); 

मैं एक सत्र खोलने के लिए और मैं InRequestScope में रख, लेकिन Ninject मेरी ISession को बंद करने के लिए ले जाएगा, जब यह अनुरोध क्षेत्र से बाहर है?

+0

क्या आप समझा सकते हैं कि यह http://stackoverflow.com/questions/5221620/nhibernate- निर्भरता- इंजेक्शन- क्लोज़-isession-properly कृपया और/या इसे बंद करने पर विचार करें - इस quesxztion के बहुत सारे डुप्लिकेट हैं जो यही कारण है कि उनमें से कोई भी उचित जवाब आईएमओ नहीं है? –

+0

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

+0

@ ल्यूटिका: समस्या यह है कि कम से कम 2 और आधा प्रश्न + उत्तर हैं। @ डारिन ने उन्हें रखरखाव में से एक के रूप में हटा दिया (@ रेमो ग्लोर) ने अपने जवाब में एक दक्षता की ओर इशारा किया। @ डारिन को शायद इसे छोड़ दिया जाना चाहिए और एक वापसी के रूप में संपादित किया जाना चाहिए क्योंकि इस तथ्य के रूप में कि वह किसी के लिए सीखने का अनुभव है। अगर मैं पदों को हटाने में सक्षम था, तो मैं निश्चित रूप से नहीं चाहता - मैं इसे ठीक करने के लिए उत्तर में टिप्पणी करता हूं या एक बेहतर संस्करण पोस्ट करता हूं अगर मुझे कोई परिणाम नहीं मिला –

उत्तर

7

यदि मैं सही ढंग से कोड को समझता हूं तो उत्तर हाँ है। निनजेक्ट द्वारा उपयोग की जाने वाली एक्टिवेशन स्ट्रैटजीज में से एक डिस्पोजेबल स्ट्रेटजी है, जिसका निष्क्रिय निष्क्रिय तरीका, आईडीआईस्पोज़बल लागू करने वाली किसी भी चीज़ पर निपटान करता है। यदि आप Ninject.Web.MVC एक्सटेंशन का उपयोग कर रहे हैं, तो OnePerRequestModule स्वचालित रूप से बाध्यकारी कैश साफ़ कर देगा। यह डिस्पोजेबल स्ट्रैटजी सहित सभी सक्रियण रणनीतियों पर निष्क्रिय विधि को कॉल करेगा।

चूंकि ISession लागू करने योग्य लागू करता है, तो इसका निपटारा किया जाएगा। ISession, सत्र Impl का डिफ़ॉल्ट कार्यान्वयन, निपटान पर सत्र बंद कर देता है।

यदि आप Ninject.Web.MVC एक्सटेंशन का उपयोग नहीं कर रहे हैं तो कैश को अंततः साफ़ कर दिया जाएगा, लेकिन EndRequest पर सही नहीं हो सकता है।