
در این مقاله، در رابطه با الگوی طراحی Session Wrapper جهت تسهیل دسترسی به Session خواهیم آموخت.تا پایان مقاله همراه ما باشید.
در پست قبل، نحوه ی استفاده از Session را در ASP.NET Core آموختیم. بطور خلاصه، دسترسی به session را بصورت “ Typed ” انجام خواهیم داد.
همچنین، هرگونه اعتبارسنجی یا محدودیت را در این کلاس wrapper اعمال می کنیم.
ایجاد یک کلاس Session Manager
در این مثال، دو آیتم را در Session ذخیره می کنیم (یعنی ID و LoginName).
using Microsoft.AspNetCore.Http;
public class SessionManager
{
private readonly ISession _session;
private const String ID_KEY = "_ID";
private const String LOGIN_KEY = "_LoginName";
public SessionManager(IHttpContextAccessor httpContextAccessor)
{
_session = httpContextAccessor.HttpContext.Session;
}
public int ID
{
get
{
var v = _session.GetInt32(ID_KEY);
if (v.HasValue)
return v.Value;
else
return 0;
}
set
{
_session.SetInt32(ID_KEY, value);
}
}
public String LoginName
{
get
{
return _session.GetString(LOGIN_KEY);
}
set
{
_session.SetString(LOGIN_KEY, value);
}
}
public Boolean IsLoggedIn
{
get
{
if (ID > 0)
return true;
else
return false;
}
}
}
مرحله ۲:
ثبت IHttpContextAccessor و SessionManager در فایل Startup.
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); services.AddScoped<SessionManager>();
مرحله ۳:
تزریق SessionManager در کلاس های خود. در اینجا مثالی از کلاس Controller آورده شده، اما به روشی مشابه، می تواند در کلاس های غیر کنترلگر نیز تزریق شود.
private readonly SessionManager _sessionManager;
public HomeController(SessionManager sessionManager)
{
_sessionManager = sessionManager;
}
مرحله ۴:
بکارگیری SessionManager جهت دسترسی به Session Data
_sessionManager.ID = 1; _sessionManager.LoginName = dto.Login;
if(_sessionManager.IsLoggedIn == true)
{
ViewBag.Login = _sessionManager.LoginName;
return View();
}
نتیجه گیری:
این الگوی wrapper در بکارگیری Session بدون نگرانی در رابطه با KeyNames یاری کننده بوده و دسترسی را تسهیل می کند.
همچنین به ما در اعمال شرایط و محدودیت های متفاوت در یک کلاس wrapper کمک می کند.
برچسب:
نویسنده: دانلودی