Теоретически люди скажут вам, что это плохая деловая практика.
На практике нам просто нужны были данные с уровня сеанса, постоянно доступные на бизнес-уровнях. : - (
Мы закончили тем, что объединили разные механизмы хранения под небольшим интерфейсом.
public interface ISessionStorage
{
SomeSessionData Data {get;set;}
...
.. and most of the data we need stored at "session" level
}
//and a singleton to access it
public static ISessionStorage ISessionStorage;
этот интерфейс доступен практически в любом месте нашего кода.
Тогда у нас есть как Session, так и / или одноэлементная реализация
public WebSessionStorage
{
public SomeSessionData Data
{
get { return HttpContext.Current.Session["somekey"] as SomeSessionData;}
set { HttpContext.Current.Session["somekey"] = value;}
}
public WebFormsSessionStorage
{
private static SomeSessionData _SomeSessionData; //this was before automatic get;set;
public SomeSessionData
{
get{ return _SomeSessionData;}
set{ _SomeSessionData=value; }
}
}
При запуске приложения, сайт будет делать
Framework.Storage.SessionStorage = new WebSessionStorage();
в Global.asax, и FormsApp сделает
Framework.Storage.SessionStorage = new WebFormsSessionStorage();