के लिए थ्रेड सुरक्षा और स्कोप प्रबंधन मैं नया .NET 4.0 कैशिंग API, ObjectCache का उपयोग कर रहा हूं। मैं पिछले कुछ दिनों से इस क्षेत्र पर कुछ सवाल पूछा है, और मैं इस मुद्दे पर संकेत दिया गया है - लेकिन सोचा था कि यह उसके अपने प्रश्न में यह बाहर तोड़ लाभदायक है।.NET 4.0 ऑब्जेक्ट कैश
क्योंकि कक्षा सार है और सभी विधियां आभासी हैं, इसका मतलब है कि हम अपना खुद का कस्टम कैश प्रदाता बना सकते हैं।
एमएसडीएन के अनुसार, ObjectCache
को सिंगलटन नहीं होना चाहिए, और आप अपने आवेदन में इसके कई उदाहरण बना सकते हैं।
लेकिन मेरे लिए ऐसा लगता है कि हमें इस वस्तु के तत्काल और जीवनकाल को भी प्रबंधित करने की आवश्यकता है?
मेरे पास एक निर्भरता इंजेक्शन कंटेनर के रूप में StructureMap के साथ एक एएसपी.नेट एमवीसी 3 वेब अनुप्रयोग है।
मैं अपने पूरे वेब आवेदन के लिए एक एकल, साझा कैश करना चाहते हैं।
तो, मैं एक बहुत ही सरल वर्ग बनाता हूं जो ObjectCache
कक्षा को लपेटता है, और विधियों के कार्यान्वयन में अनबॉक्सिंग प्रदान करता है।
वर्ग ctor में ObjectCache
का एक उदाहरण लेता है, और एक निजी स्थिर कैश है, जो विधि (जोड़े, जाओ, आदि) से दूर काम के कहने को यह तय करता है।
जैसे
public class CacheManager
{
private static ObjectCache _cache;
public CacheManager(ObjectCache cache)
{
_cache = cache;
}
// Add, Get, Remove methods work off _cache instance.
}
अब, यहाँ मेरी डि रजिस्ट्री है:
For<CacheManager>().Singleton().Use<CacheManager>().Ctor<ObjectCache>("cache").Is(MemoryCache.Default);
अंग्रेज़ी में: जब कुछ एक CacheManager उदाहरण अनुरोध करता है, एक सिंगलटन उदाहरण का उपयोग, और ObjectCache पैरामीटर सेट एक होने के लिए MemoryCache उदाहरण।
- तो मैं एक वर्ग
ObjectCache
रैप करने के लिए है, इस वर्ग के एक सिंगलटन होने की जरूरत है:तो वहाँ मैं क्या है, अब सवाल है?
- एमएसडीएन का कहना है कि
ObjectCache
थ्रेड-सुरक्षित है, लेकिन अब जब मैं एक सिंगलटन का उपयोग कर रहा हूं, क्या मुझे थ्रेड सुरक्षा रखने के लिए किसी भी प्रकार की लॉकिंग की आवश्यकता है? - क्या मेरे रैपर वर्ग में
ObjectCache
का निजी उदाहरण स्थिर होना चाहिए? वर्ग खुद को स्थिर करने की आवश्यकता है? - मेरी कुल कार्यान्वयन पर सामान्य विचार?
मैं ASP.NET वेब अनुप्रयोगों में नेट ObjectCache पर एक सभ्य ब्लॉग/लेख ढूँढने में सक्षम मेरी भ्रम नहीं किया गया है, इसलिए।
मैं HttpContext.Current.Cache
(जो स्थैतिक है) का उपयोग करने के लिए उपयोग किया जाता है और कैश के लिए आजीवन प्रबंधन की परवाह नहीं करता है।
यही वह उत्तर है जिसे मैं ढूंढ रहा था। धन्यवाद। वैसे - आपको क्या लगता है कि 'MemoryCache.Default' एक सिंगलटन है? – RPM1984
और सामान्य रूप से, मैं एक इंटरफ़ेस का उपयोग करता हूं, लेकिन 'ऑब्जेक्ट कैश' प्रकार का मेरा इंटरफ़ेस है, जिसमें यह एक अमूर्त वर्ग है। तो अगर मैं किसी अन्य कैश प्रदाता पर फ़्लिक करना चाहता हूं, तो मैं केवल कैशमेनगर वर्ग के सीटीआर में किस प्रकार के 'ऑब्जेक्ट कैश' को इंजेक्शन देता हूं, बदलता हूं। – RPM1984
@Travis - उपरोक्त को कोई टिप्पणी? – RPM1984