Простой обзор того, как я бы это сделал:
Это может решить и другие проблемы:
Сначала мы определим интерфейс:
public interface ISessionWrapper
{
int? SomeInteger { get; set; }
}
Затем мы делаем реализацию HttpContext:
public class HttpContextSessionWrapper : ISessionWrapper
{
private T GetFromSession<T>(string key)
{
return (T) HttpContext.Current.Session[key];
}
private void SetInSession(string key, object value)
{
HttpContext.Current.Session[key] = value;
}
public int? SomeInteger
{
get { return GetFromSession<int?>("SomeInteger"); }
set { SetInSession("SomeInteger", value); }
}
}
Затем мы определяем наш базовый контроллер:
public class BaseController : Controller
{
public ISessionWrapper SessionWrapper { get; set; }
public BaseController()
{
SessionWrapper = new HttpContextSessionWrapper();
}
}
Наконец:
public ActionResult NumbersGame(int myNum)
{
if (SessionWrapper.SomeInteger == myNum)
//Do what you want;
}
Нет необходимости кастовать здесь !! И если вы хотите проверить свой контроллер, у вас нет проблем с Session. Вы просто Mock ISessionWrapper и передаете его в переменную SessionWrapper.