"> الگوی طراحی Session Wrapper برای ASP.NET Core | ام اس پی سافت

الگوی طراحی 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 کمک می کند.

  • پسورد: www.mspsoft.com
زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.