2013-06-06 4 views
7

मेरे पास एक बिल्डर क्लास है जो एक उदाहरण को लागू करने योग्य उदाहरण बनाता है। जब भी आइटम बनाने के लिए पहले से ही कैश में है, तो निर्माता उस उदाहरण को बदलेगा। मेरा सवाल यह है कि, क्या कैश डिस्पोजेक्ट() विधि को उस IDISposable आइटम्स पर कॉल करेगा जब इसे बेदखल किया जाता है या क्या मुझे कॉलबैक कैशइटेम पॉलिसी पर उस व्यवहार को स्पष्ट रूप से कोड करना होगा। RemovedCallback?सिस्टम होगा। Runtime.Caching.MemoryCache बेदखल होने पर IDisposable आइटम का निपटान?

उत्तर

8

नहीं Dispose नहीं कहा जाता है। परीक्षण करना आसान है।

public class TestClass : IDisposable 
{ 
    public void Dispose() 
    { 
     Console.WriteLine("disposed"); 
    } 
} 

MemoryCache _MemoryCache = new MemoryCache("TEST"); 

void Test() 
{ 
    _MemoryCache.Add("key", 
         new TestClass(), 
         new CacheItemPolicy() 
         { 
          AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10), 
          RemovedCallback = (_) => { Console.WriteLine("removed"); } 
         }); 

} 
+0

@RobSiklos कृपया परीक्षण करने से पहले कोड को ठीक न करें। बात ठीक थी। लैम्ब्डा को एक पैरामीटर की आवश्यकता होती है जिसका मैं उपयोग नहीं करता हूं। मैंने जवाब वापस कर दिया। – I4V

+0

बहुत खेद है - मैंने सोचा था कि यह एक टाइपो – RobSiklos

+0

था, मैं इस परीक्षण को एक यूनिट टेस्ट के रूप में रखता हूं, ढांचे के बाद के संस्करण इस व्यवहार को बदल सकते हैं, और आपको एक परीक्षण पसंद आएगा जो यह दर्शाता है कि यह बदल गया है! –

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