Usar el cache de ASP.NET fuera de ASP.NET

Es posible usar el cache de ASP.NET (System.Web.Caching) fuera de ASP.NET, por ejemplo en aplicaciones Windows Forms, de Consola o Servicios Windows.

Para ello debes agregar un referencia al ensamblado System.Web.

Reeferencia a Ensamblado System.Web en applicación Windows Forms

En el código puedes importar dos espacio de nombres para facilitar el acceso a las clases: System.Web y System.Web.Caching.

using System.Web;
using System.Web.Caching;

Usamos el objeto HttpRuntime para acceder al cache.

public void DoSomething()
{
    string myData = "This is my data.";
    HttpRuntime.Cache.Insert("myData", myData);
}

Es posible, pero debo hacerlo?

En la versiones 1.0 y 1.1 del .NET Framework estaba explicitamente contraindicado pues no funcionaba: KB 917411.

En las versiones 2.0 y superior la documentación de msdn no dice que no se puede, pero con prudencia indica que no esta probado fuera de ASP.NET, y eventualmente podría fallar: msdn.

En la documentación de Caching Application Block (que es la mejor alternativa a System.Web.Caching) dice que si se puede.

En Caching Architecture Guide también se indica que si puede. (Buscar: Using the ASP.NET Cache in Non-Web Applications).

Personalmente creo que si se puede y en general hay bastante consenso en que System.Web.Caching es una buena alternativa para ser usada fuera de ASP.NET. Pero comprendo que puede ser algo extraño e inquietante tener una dependencia a System.Web en otro tipo de aplicación.

Si aun tienes suspicacias puedes elegir Caching Application Block.

Ver también