2013-06-06 13 views
7

Ho una classe builder che crea un'istanza che implementa IDisposable. Ogni volta che l'elemento da costruire è già nella cache, il builder restituirà invece quell'istanza. La mia domanda è, la cache chiamerà il metodo Dispose() sugli elementi IDisposable che contiene quando sono sfrattati o devo codificare esplicitamente tale comportamento sul callback CacheItemPolicy.RemovedCallback?System.Runtime.Caching.MemoryCache disporrà di oggetti identificabili quando viene rimosso?

risposta

8

No Dispose non viene chiamato. È facile da testare.

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 Si prega di non correggere il codice prima di testarlo. Era corretto Lambda richiede un parametro che non uso. Ho ripristinato la risposta. – I4V

+0

molto molto dispiaciuto - ho pensato che fosse un errore di battitura – RobSiklos

+0

terrò questo test come un test unitario, versioni successive del framework potrebbero cambiare questo comportamento, e ti piacerà un test che indica che questo è cambiato! –

Problemi correlati