الگوی Options pattern در ASP.NET Core برای پیکربندی تنظیمات برنامهها استفاده میشود. این الگو به شما اجازه میدهد تا تنظیمات پیکربندی را به صورت امن و منظم مدیریت کنید. این موضوع در برنامههای بزرگ و پیچیده که نیاز به مدیریت تنظیمات مختلف دارند، بسیار مفید است.
در ASP.NET Core، تنظیمات پیکربندی (Configuration Settings) به صورت کلاسهای ساده (POCO - Plain Old CLR Objects) تعریف میشوند که به شما کمک میکنند تا به راحتی تنظیمات برنامه را مدیریت کنید. این الگو (Pattern) به شما این امکان را میدهد که تنظیمات خود را از منابع مختلف مانند فایلهای پیکربندی (مثل appsettings.json
)، متغیرهای محیطی (Environment Variables)، و سایر منابع بارگذاری کنید.
در این بخش، مراحل استفاده از الگوی Options pattern در یک پروژه ASP.NET Core را توضیح میدهیم.
مرحله ۱: ایجاد کلاس پیکربندی
ابتدا، باید یک کلاس POCO برای نگهداری تنظیمات پیکربندی تعریف کنید:
public class MySettings { public string Setting1 { get; set; } public int Setting2 { get; set; } }
مرحله ۲: افزودن تنظیمات به فایل appsettings.json
سپس، تنظیمات خود را به فایل appsettings.json
اضافه کنید:
{
"MySettings": {
"Setting1": "Value1",
"Setting2": 42
}
}
مرحله ۳: پیکربندی DI (Dependency Injection) برای استفاده از Options Pattern
در کلاس Startup.cs
، باید کلاس تنظیمات خود را به DI container اضافه کنید:
public void ConfigureServices(IServiceCollection services) { services.Configure<MySettings>(Configuration.GetSection("MySettings")); services.AddControllersWithViews(); }
در اینجا، Configuration.GetSection("MySettings")
بخشی از تنظیمات را که مربوط به MySettings
است، به DI container اضافه میکند.
مرحله ۴: استفاده از IOptions در کلاسهای دیگر
اکنون که تنظیمات به DI container اضافه شدهاند، میتوانید آنها را در هر کجا از طریق تزریق وابستگی استفاده کنید:
using Microsoft.Extensions.Options; public class HomeController : Controller { private readonly MySettings _mySettings; public HomeController(IOptions<MySettings> options) { _mySettings = options.Value; } public IActionResult Index() { ViewBag.Setting1 = _mySettings.Setting1; ViewBag.Setting2 = _mySettings.Setting2; return View(); } }
۳. پیکربندی Options به صورت پویا (Options Snapshot)
درASP.NET Core همچنین از الگوی IOptionsSnapshot<T> پشتیبانی میکند که به شما اجازه میدهد تنظیمات را به صورت پویا تغییر دهید. IOptionsSnapshot برای تنظیمات که باید در زمان اجرا بهروز شوند بسیار مفید است.
برای استفاده از این قابلیت، به سادگی به جای IOptions
از IOptionsSnapshot
استفاده کنید:
public class HomeController : Controller { private readonly MySettings _mySettings; public HomeController(IOptionsSnapshot<MySettings> options) { _mySettings = options.Value; } public IActionResult Index() { ViewBag.Setting1 = _mySettings.Setting1; ViewBag.Setting2 = _mySettings.Setting2; return View(); } }
۴. اعتبارسنجی تنظیمات (Options Validation)
برای اعتبارسنجی تنظیمات پیکربندی، میتوانید از متد Validate
استفاده کنید:
services.Configure<MySettings>(Configuration.GetSection("MySettings")) .Validate(settings => settings.Setting2 > 0, "Setting2 باید بزرگتر از 0 باشد");
۵. استفاده از IOptionsMonitor برای نظارت بر تغییرات
برای نظارت بر تغییرات در تنظیمات پیکربندی در زمان اجرا از IOptionsMonitor
استفاده میشود. این رابط به شما امکان میدهد که با تغییر تنظیمات بهروزرسانی شوید.
public class HomeController : Controller { private readonly MySettings _mySettings; private readonly IOptionsMonitor<MySettings> _optionsMonitor; public HomeController(IOptionsMonitor<MySettings> optionsMonitor) { _optionsMonitor = optionsMonitor; _mySettings = optionsMonitor.CurrentValue; _optionsMonitor.OnChange(updatedSettings => { System.Diagnostics.Debug.WriteLine($"تنظیمات تغییر کردند: {updatedSettings.Setting1}, {updatedSettings.Setting2}"); }); } public IActionResult Index() { var settings = _optionsMonitor.CurrentValue; ViewBag.Setting1 = settings.Setting1; ViewBag.Setting2 = settings.Setting2; return View(); } }
الگوی Options pattern در ASP.NET Core یک روش مناسب و ایمن برای مدیریت تنظیمات پیکربندی است. با استفاده از IOptions
, IOptionsSnapshot
و IOptionsMonitor
، میتوانید به راحتی تنظیمات را مدیریت کرده و تغییرات را در زمان اجرا کنترل کنید.
این الگو به بهبود ساختار کد و جداسازی concerns در برنامههای بزرگ کمک میکند و استفاده از آن به تمامی توسعهدهندگان ASP.NET Core توصیه میشود