Depuis la version 4 du framework .NET, la gestion d’un cache est profondement encrée dans l’adn de notre framework.

Il devient alors extrêmement facile de stocker en mémoire à peu près n’importe quoi.

Je vous livre dans ce court billet, une implémentation extrêmement simple que j’utilise souvent dans mes projets.

Commençons par définir une interface, qui nous permettra [d’injecter](http://blog.ploeh.dk/tags.html#Dependency Injection-ref) notre cache manager un peu partout :

public interface ICacheManager
{
    T GetOrInsert(string key, Func callback) where T : class;
}

et finalement voici une implémentation extra simple de notre cache manager

public class CacheManager : ICacheManager
{
    public T GetOrInsert(string key, Func callback) where T : class
    {
        ObjectCache cache = MemoryCache.Default;
        if (cache.Contains(key))
            return cache[key] as T;
        T elmnt = callback();
        cache.Add(new CacheItem(key, elmnt), new CacheItemPolicy());
        return elmnt;
    }
}

Voici un exemple d’utilisation.

IEnumerable
 products = _cache.GetOrInsert("Ma_Clef_Unique_Cache", 
() => { return _productService.GetFrenchProducts(); } );

Simple non?