الگوی Options این امکان را فراهم میکند که به تمام تنظیمات پیکربندی خود، معمولاً از فایل appsettings.json، بهصورت strongly typed در زمان اجرا دسترسی داشته باشید.
الگوی Options رویکردی ساختاریافتهتر ارائه میدهد و قابلیتهایی مانند اعتبارسنجی، بارگذاری مجدد زنده (Live Reloading) و آزمایش آسانتر را فراهم میکند.
خب توی این بخش می خوام بصورت خیلی ساده توضیح بدم که تنظیمات مرتبط با یک برنامه رو چطوری ایجاد کنیم و نحوه استفاده و همچنین نحوه بروز رسانی این تنظیمات رو بصورت real time انجام بدیم.
در صورتی که بخواهیم تنظیمات را بدون راهاندازی مجدد برنامه بهروزرسانی کنیم، میتوانیم از IOptionsSnapshot<T>
یا IOptionsMonitor<T>
بسته به شرایط استفاده کنیم.
گام اول : ایجاد کلاسی برای استفاده و نمایش فایل تنظیمات مورد نیاز برنامه. برای مثال من می خوام تنظیمات مرتبط با سرویس نقشه استفاده شده در اپلیکشن خودم رو با نام MapOptions استفاده کنم.
گام دوم : اضافه کردن section تنظیمات به فایل appsettings.json موجود در پروژه . در این مثال من setting مرتبط با نقشه رو به فایل خودم اضافه می کنم.
گام سوم : Bind کردن Configuration Section به کلاس تعریف شده می باشد، اینکار باید داخل فایل program.cs پروژه انجام شود.
داخل کنترلر با Inject کردن IOptions<MapOptions>c میتوان از این تنظیمات استفاده کرد.
استفاده از IOptionsSnapshot:
اگر بخواهیم PORT و Key را تغییر دهیم، باید برنامه را مجدد راهاندازی کنیم تا تغییرات اعمال شوند، زیرا IOptions<T> از بارگذاری مجدد زنده (Live Reloading) پشتیبانی نمیکند.
اما یک گزینه بهتر به نام IOptionsSnapshot وجود دارد.
سرویس IOptionsSnapshot بهعنوان یک Scoped ثبت میشود و مقدار تنظیمات را فقط در طول عمر یک درخواست نگه میدارد.
بنابراین، فقط باید آن را با وابستگیهای Scoped و Transient استفاده کنیم و نمیتوانیم آن را داخل سرویسهای Singleton تزریق کنیم!
استفاده از IOptionsSnapshot برای خواندن تنظیمات بهروزرسانیشده
استفاده از IOptionsMonitor:
سرویس IOptionsMonitor بهعنوان یک Singleton ثبت میشود.
بنابراین، اگر سرویس شما Singleton است، باید از IOptionsMonitor استفاده کنید.
همچنین، اگر میخواهید مقادیر پیکربندی بلافاصله در دسترس باشند، IOptionsMonitor گزینه مناسبی است.
سرویسIOptionsSnapshot را نمیتوان در سرویسهای Singleton تزریق کرد، در غیر این صورت باعث خطا خواهد شد.
استفاده از IOptionsMonitor برای خواندن تنظیمات بهروزرسانیشده
سرویسIOptionsMonitor بهجای Value از CurrentValue برای دریافت مقادیر پیکربندی استفاده میکند.
.......................
مقایسه IOptions، IOptionsSnapshot و IOptionsMonitor
✅ IOptions:
✅ IOptionsSnapshot:
✅ IOptionsMonitor: