2009-02-23 19 views
6

कैसल विंडसर का उपयोग करना, मैं एक घटक क्षणिक जीवन शैली के साथ विन्यस्त:कैसल विंडसर: क्या मेरा क्षणिक घटक कचरा इकट्ठा होगा?

<component id="publish.mapping.default" 
        service="IMyService, MyAssembly" 
        type="MyServiceImplementation, Myassembly" 
        lifestyle="transient" /> 

कौन इस तरह उपयोग किया जाएगा:

var service = container.Resolve<IMyService>(componentId); 
// service usage .... 
// service goes out of scope ... 

मेरे सवाल है, सेवा उदाहरण कचरा यह बाद एकत्र किया जाएगा गुंजाइश से बाहर चला जाता है, या कैसल विंडसर एक संदर्भ पर पकड़ जाएगा? मुझे this similar question मिला, जिसका अर्थ है कि उत्तरार्द्ध मामला हो सकता है - लेकिन वहां पोस्ट किए गए लिंक की जांच करने के बाद, मुझे यह सुनिश्चित नहीं है कि चर्चा संदर्भ पर है या यह सुनिश्चित करने के बारे में है कि ऑब्जेक्ट का निपटारा करने पर ऑब्जेक्ट का निपटारा किया जा रहा है या नहीं। मेरी वस्तुओं को निपटाने की जरूरत नहीं है।

यदि कैसल विंडसर उदाहरण पर है, तो क्या इसे रोकने के लिए कोई आसान तरीका है (शायद कॉन्फ़िगरेशन द्वारा)?

संपादित
ऐसा लगता है, मैं रिलीज पर नज़र रखने नीति निर्धारित करने की आवश्यकता है। क्या इसे xml config फ़ाइल में कॉन्फ़िगर किया जा सकता है, या इसे कोड में सेट करने की आवश्यकता है? क्या रिलीज ट्रैकिंग नीति प्रति-घटक आधार पर सेट की जा सकती है?

उत्तर

9

डिफ़ॉल्ट रूप से, कंटेनर आपके ऑब्जेक्ट्स (यहां तक ​​कि क्षणिक वाले) का संदर्भ रखता है।

हालांकि, @में @ बिटरकोडर नोट्स के रूप में, आप change the release tracking policy कर सकते हैं।

var policy = container.Kernel.ReleasePolicy; 
container.Kernel.ReleasePolicy = LifecycledComponentsReleasePolicy; 

लेकिन चूंकि प्रश्न पूछा गया था, कि डिफ़ॉल्ट नीति हो हो गया था: यह है कि चुनने

LifecycledComponentsReleasePolicy लगता है।

+0

धन्यवाद। क्या आप जानते हैं कि यह प्रति घटक आधार पर कॉन्फ़िगर किया जा सकता है? (मेरे प्रश्न में संपादन देखें) – driis

+0

मुझे ऐसा नहीं लगता है। मैं वास्तव में कैसल का उपयोग नहीं करता (मुझे पसंद है), लेकिन दस्तावेज़ों का सुझाव है कि यह कर्नेल-चौड़ा है। मुझे यकीन नहीं है कि यह करने के लिए सही बात है, लेकिन एक कस्टम पॉलिसी जोड़ना संभव हो सकता है जो आपके घटक प्रकार पर ध्यान दे ... –

+0

रिलीज पॉलिसी की सेटिंग कंटेनर चौड़ी है। वास्तव में ऐसे दस्तावेज हैं जो निर्दिष्ट करते हैं कि रिलीज पॉलिसी की सेटिंग कंटेनर का उदाहरण बनाने के बाद पहली चीजों में से एक है। यदि इस नियम का पालन नहीं किया जाता है तो कुछ घटक एक विशिष्ट रिलीज नीति और दूसरे का उपयोग करके अन्य बनाए जाएंगे। इसका परिणाम स्मृति रिसाव के कारण होने की उच्च संभावना हो सकती है। – Chai

1

ध्यान देने योग्य एक बात यह है कि ऐसा लगता है कि यह कैसल ट्रंक में तय किया गया है। आर 5475 में, हैमेट ने माइक्रोक्रोन में लाइफसाइक्ड कॉम्पोनेंट्स रिलीज पॉलिसी में डिफ़ॉल्ट रिलीज पॉलिसी बदल दी।

+0

स्रोत की जांच नहीं की है, लेकिन प्रतिबिंबक यह सुझाव देते हैं कि यह वास्तव में डिफ़ॉल्ट कर्नेल कन्स्ट्रक्टर में मामला है। जानना आसान है, धन्यवाद! – Gavin

+0

तो इसका वास्तव में क्या अर्थ है? कि रिसाव क्षणिक के साथ एक समस्या नहीं होनी चाहिए? – Sinaesthetic

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