Asp.net Strong type Session
4387 ワード
using HttpContext = System.Web.HttpContext;
using System.Threading;
namespace CRMWeb.eDAS.Util
{
public sealed class EDasSession<TClass> where TClass : class ,new()
{
#region member
private readonly ReaderWriterLockSlim _lockSlim = new ReaderWriterLockSlim();
#endregion
#region methods
public TClass Current
{
get
{
return HttpContext.Current.Session[Key] == null
? null
: (TClass)HttpContext.Current.Session[Key];
}
}
public TClass Set(TClass value)
{
var sessionObj = HttpContext.Current.Session[Key];
if (sessionObj == null)
{
_lockSlim.EnterWriteLock();
if (sessionObj == null)
{
HttpContext.Current.Session[Key] = value;
}
_lockSlim.ExitWriteLock();
}
else
{
_lockSlim.EnterWriteLock();
HttpContext.Current.Session[Key] = value;
_lockSlim.ExitWriteLock();
}
return (TClass)sessionObj;
}
public void Remove()
{
HttpContext.Current.Session.Remove(Key);
}
#endregion
#region Private
private string Key
{
get { return typeof(EDasSession<TClass>).FullName; }
}
#endregion
}
}
You can create a Website context like this :
using CRMWeb.eDAS.Entities.SessionEntity;
namespace CRMWeb.eDAS.Util
{
public sealed class EdasContext
{
public static EDasSession<SessionBranchInfo> BranchLoginSession;
public static EDasSession<SessionUserInfo> SalesPersonSession;
public static EDasSession<SessionCustomerQueueInfo> CustomerQueueSession;
public static EDasSession<SessionCustomerPersonalDetails> CustomerDetailsSession;
public static EDasSession<SessionPaymentInfo> CurrentPaymentSession;
public static EDasSession<SessionCheckoutInfo> CheckoutInfo;
public static EDasSession<SessionInfoVoucherDetails> VoucherDetailsSession;
public static EDasSession<SessionServiceInfo> CurrentServiceSession;
public static EDasSession<SessionTicketInfo> TicketInfoSession;
public static EDasSession<SessionShoppingCart> ShoppingCartSession;
static EdasContext()
{
if(BranchLoginSession == null) BranchLoginSession = new EDasSession<SessionBranchInfo>();
if(SalesPersonSession == null) SalesPersonSession = new EDasSession<SessionUserInfo>();
if(CustomerQueueSession == null) CustomerQueueSession = new EDasSession<SessionCustomerQueueInfo>();
if(CustomerDetailsSession == null) CustomerDetailsSession = new EDasSession<SessionCustomerPersonalDetails>();
if(CurrentPaymentSession == null) CurrentPaymentSession = new EDasSession<SessionPaymentInfo>();
if(CheckoutInfo == null) CheckoutInfo = new EDasSession<SessionCheckoutInfo>();
if(VoucherDetailsSession == null) VoucherDetailsSession = new EDasSession<SessionInfoVoucherDetails>();
if(CurrentServiceSession == null) CurrentServiceSession = new EDasSession<SessionServiceInfo>();
if(TicketInfoSession == null) TicketInfoSession = new EDasSession<SessionTicketInfo>();
if(ShoppingCartSession == null) ShoppingCartSession = new EDasSession<SessionShoppingCart>();
}
public static void ClearAll()
{
BranchLoginSession.Remove();
SalesPersonSession.Remove();
TicketInfoSession.Remove();
ClearCustomerSession();
}
public static void ClearCustomerSession()
{
CustomerQueueSession.Remove();
CustomerDetailsSession.Remove();
CurrentPaymentSession.Remove();
CheckoutInfo.Remove();
VoucherDetailsSession.Remove();
CurrentServiceSession.Remove();
ShoppingCartSession.Remove();
}
}
}