Простой обзор того, как я хотел бы сделать это:
Это может решить и другие проблемы:
Сначала определим интерфейс:
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;
}
Нет необходимости бросить здесь !! И если вы хотите протестировать ваш контроллер, у вас нет проблем с сеансом. Вы просто Mock ISessionWrapper и передаете его переменной SessionWrapper.
Это сработало, но теперь ссылка на объект не задана ... что мне не хватает? – MrM
Сначала проверьте нуль. –
Просто используйте Convert.ToInt32() в соответствии с моим ответом. Тогда вам не нужно проверять значение null. –