Poor man's cache

Publié par Fabrice Michellonet sous le(s) label(s) , , le 4 avril 2014

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 notre cache manager un peu partout :

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

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

public class CacheManager : ICacheManager
{
    public T GetOrInsert<T>(string key, Func<T> 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<Product> products = _cache.GetOrInsert("Ma_Clef_Unique_Cache", 
() => { return _productService.GetFrenchProducts(); } );

Simple non?