Hace un par de días Eduardo Quintas publicó en Geeks, un interesante post titulado "Desacoplando System.Web.Cache de nuestra lógica de negocio". En él describía cómo crear mediante el uso de algunos patrones una arquitectura de caché que permitía desacoplar nuestra aplicación de la tecnología de caché utilizada, de forma que usando el mismo código y sólo cambiando el proveedor podríamos usar diferentes tipos de caché y en distintos ámbitos (web, Windows Forms...). Léetelo porque es muy interesante.

Al hilo de esto añadí un comentario sobre cómo usar la caché de ASP.NEt fuera de aplicaciones Web. Lo cierto es que las veces que lo he usado sólo ha sido con pruebas y no en aplicaciones reales, por lo que no puedo asegurar que no sea cierto lo que dice Eduardo sobre ciertos problemas al llamarla desde múltiples hilos, pero sí puedo asegurar que funciona mientras estemos dentro de un mismo dominio de aplicación.

para usar la caché de ASP.NET en contextos diferentes a la Web basta con instanciarla adecuadamente ya que toda la funcionalidad está incluida por separado en el espacio de nombres System.Web.Caching. Lo difícil es instanciar la clase Cache de este espacio de nombres.

En concreto la forma más fácil de hacerlo es instanciando la clase HttpRuntime y usando su propiedad Cache. Por ejemplo en una aplicación de consola se haría así (hay que agregar una referencia a System.Web.dll):

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

public class Prueba
{
 public static void Main()
 {
  HttpRuntime httpRT = new HttpRuntime();
  Cache cache = HttpRuntime.Cache;
  cache["prueba"] = "Hola Edu";
  Console.ReadLine();
  Console.WriteLine(cache["prueba"]);
  Console.ReadLine();
 }
}

En una DLL se haría igual.

Esta caché se mantiene todo el rato para un mismo dominio de aplicación, así que nos vale para cualquier aplicación de host que queramos crear (por ejemplo en una capa de negocio remota) o para un EXE normal mientras se esté ejecutando, por lo que tiene una gran utilidad.

Espero que le resulte útil a alguien.

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA