Второй кажется лучшим.Хотя я, вероятно, написал бы эти два в качестве методов расширения для HttpSessionStateBase вместо того, чтобы помещать их в базовый контроллер.Например:
public static class SessionExtensions
{
public static T GetDataFromSession<T>(this HttpSessionStateBase session, string key)
{
return (T)session[key];
}
public static void SetDataInSession<T>(this HttpSessionStateBase session, string key, object value)
{
session[key] = value;
}
}
, а затем внутри контроллеров, или помощников, или чего-то, имеющего экземпляр HttpSessionStateBase
, используйте его:
public ActionResult Index()
{
Session.SetDataInSession("key1", "value1");
string value = Session.GetDataFromSession<string>("key1");
...
}
Написание оболочек сессии бесполезно в ASP.NET MVC как HttpSessionStateBase
, предоставляемый фреймворком, уже является абстрактным классом, который можно легко смоделировать в модульных тестах.