الگوی طراحی Session Wrapper برای ASP.NET Core

ساخت وبلاگ

Session Wrapper

در این مقاله، در رابطه با الگوی طراحی Session Wrapper جهت تسهیل دسترسی به Session خواهیم آموخت.تا پایان مقاله همراه ما باشید.

در پست قبل، نحوه ی استفاده از Session را در ASP.NET Core آموختیم. بطور خلاصه، دسترسی به session را بصورت “ Typed ” انجام خواهیم داد.

همچنین، هرگونه اعتبارسنجی یا محدودیت را در این کلاس wrapper اعمال می کنیم.

 ایجاد یک کلاس Session Manager

در این مثال، دو آیتم را در Session ذخیره می کنیم (یعنی ID و LoginName).

  1. IHttpContextAccessor را تزریق می کنیم تا بتوانیم به متغیر Session دسترسی یابیم.
  2.  ویژگی هایی را ایجاد می کنیم که در حقیقت به متغیر Session دسترسی یافته و داده ها را بازگردانی می کنند یا داده ها را در Session می نویسند.
  3.  یک ویژگی کمکی به نام “ IsLoggedIn ” افزوده ایم که جهت تصمیم گیری از دیگر ویژگی ها استفاده می کند. می توانیم ویژگی های wrapper این چنینی دیگری داشته باشیم.
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 کمک می کند.

آموزشی برنامه نویسی...
ما را در سایت آموزشی برنامه نویسی دنبال می کنید

برچسب : نویسنده : دانلودی source بازدید : 284 تاريخ : يکشنبه 1 دی 1398 ساعت: 17:19