Escribí los siguientes métodos de extensión para la Sesión para que pueda persistir y recuperar objetos por su tipo. Esto funciona bien para mi solución, pero terminé teniendo que duplicar mis métodos de extensión para cubrir el viejo HttpSessionState y el nuevo HttpSessionStateBase. Me gustaría encontrar una forma de volver a bajarlos a un conjunto que cubra ambos tipos. ¿Alguna idea?¿Cómo puedo escribir extensiones para Session sin tener que escribir métodos separados para HttpSessionState y HttpSessionStateBase?
public static class SessionExtensions
{
#region HttpSessionStateBase
public static T Get<T>(this HttpSessionStateBase session)
{
return session.Get<T>(typeof(T).Name);
}
public static T Get<T>(this HttpSessionStateBase session, string key)
{
var obj = session[key];
if(obj == null || typeof(T).IsAssignableFrom(obj.GetType()))
return (T) obj;
throw new Exception("Type '" + typeof(T).Name + "' doesn't match the type of the object retreived ('" + obj.GetType().Name + "').");
}
public static void Put<T>(this HttpSessionStateBase session, T obj, string key)
{
session[key] = obj;
}
public static void Put<T>(this HttpSessionStateBase session, T obj)
{
session.Put(obj, typeof(T).Name);
}
#endregion
#region HttpSessionState
public static T Get<T>(this HttpSessionState session)
{
return session.Get<T>(typeof(T).Name);
}
public static T Get<T>(this HttpSessionState session, string key)
{
var obj = session[ key ];
if(obj == null || typeof(T).IsAssignableFrom(obj.GetType()))
return (T) obj;
throw new Exception("Type '" + typeof(T).Name + "' doesn't match the type of the object retreived ('" + obj.GetType().Name + "').");
}
public static void Put<T>(this HttpSessionState session, T obj)
{
session.Put(obj, typeof(T).Name);
}
public static void Put<T>(this HttpSessionState session, T obj, string key)
{
session[ key ] = obj;
}
#endregion
}