آرام رحماني
آرام رحماني
خواندن ۲ دقیقه·۱ ماه پیش

Options Pattern In Dot Net

Configuration
Configuration

الگوی Options این امکان را فراهم می‌کند که به تمام تنظیمات پیکربندی خود، معمولاً از فایل appsettings.json، به‌صورت strongly typed در زمان اجرا دسترسی داشته باشید.

الگوی Options رویکردی ساختاریافته‌تر ارائه می‌دهد و قابلیت‌هایی مانند اعتبارسنجی، بارگذاری مجدد زنده (Live Reloading) و آزمایش آسان‌تر را فراهم می‌کند.

خب توی این بخش می خوام بصورت خیلی ساده توضیح بدم که تنظیمات مرتبط با یک برنامه رو چطوری ایجاد کنیم و نحوه استفاده و همچنین نحوه بروز رسانی این تنظیمات رو بصورت real time انجام بدیم.

در صورتی که بخواهیم تنظیمات را بدون راه‌اندازی مجدد برنامه به‌روزرسانی کنیم، می‌توانیم از IOptionsSnapshot<T> یا IOptionsMonitor<T> بسته به شرایط استفاده کنیم.


گام اول : ایجاد کلاسی برای استفاده و نمایش فایل تنظیمات مورد نیاز برنامه. برای مثال من می خوام تنظیمات مرتبط با سرویس نقشه استفاده شده در اپلیکشن خودم رو با نام MapOptions استفاده کنم.

کلاس MapOptions
کلاس MapOptions

گام دوم : اضافه کردن section تنظیمات به فایل appsettings.json موجود در پروژه . در این مثال من setting مرتبط با نقشه رو به فایل خودم اضافه می کنم.


configFile
configFile


گام سوم : Bind کردن Configuration Section به کلاس تعریف شده می باشد، اینکار باید داخل فایل program.cs پروژه انجام شود.

bind section
bind section

داخل کنترلر با Inject کردن IOptions<MapOptions>c میتوان از این تنظیمات استفاده کرد.

controller
controller

استفاده از IOptionsSnapshot:

اگر بخواهیم PORT و Key را تغییر دهیم، باید برنامه را مجدد راه‌اندازی کنیم تا تغییرات اعمال شوند، زیرا IOptions<T> از بارگذاری مجدد زنده (Live Reloading) پشتیبانی نمی‌کند.

اما یک گزینه بهتر به نام IOptionsSnapshot وجود دارد.

سرویس IOptionsSnapshot به‌عنوان یک Scoped ثبت می‌شود و مقدار تنظیمات را فقط در طول عمر یک درخواست نگه می‌دارد.

بنابراین، فقط باید آن را با وابستگی‌های Scoped و Transient استفاده کنیم و نمی‌توانیم آن را داخل سرویس‌های Singleton تزریق کنیم!

استفاده از IOptionsSnapshot برای خواندن تنظیمات به‌روزرسانی‌شده

snapshot
snapshot

استفاده از IOptionsMonitor:

سرویس IOptionsMonitor به‌عنوان یک Singleton ثبت می‌شود.

بنابراین، اگر سرویس شما Singleton است، باید از IOptionsMonitor استفاده کنید.

همچنین، اگر می‌خواهید مقادیر پیکربندی بلافاصله در دسترس باشند، IOptionsMonitor گزینه مناسبی است.

سرویسIOptionsSnapshot را نمی‌توان در سرویس‌های Singleton تزریق کرد، در غیر این صورت باعث خطا خواهد شد.


استفاده از IOptionsMonitor برای خواندن تنظیمات به‌روزرسانی‌شده

IOptionsMonitor
IOptionsMonitor

سرویسIOptionsMonitor به‌جای Value از CurrentValue برای دریافت مقادیر پیکربندی استفاده می‌کند.

.......................

مقایسه IOptions، IOptionsSnapshot و IOptionsMonitor

IOptions:

  • به‌عنوان Singleton ثبت می‌شود.
  • از بارگذاری مجدد تنظیمات پشتیبانی نمی‌کند.
  • مقادیر ثابت هستند و تا زمان راه‌اندازی مجدد برنامه تغییر نمی‌کنند.
  • از گزینه‌های نام‌گذاری‌شده (Named Options) پشتیبانی می‌کند.

IOptionsSnapshot:

  • به‌عنوان Scoped ثبت می‌شود.
  • از بارگذاری مجدد تنظیمات پشتیبانی می‌کند.
  • مقادیر در هر درخواست جدید، به‌روز می‌شوند.
  • از گزینه‌های نام‌گذاری‌شده (Named Options) پشتیبانی می‌کند.

IOptionsMonitor:

  • به‌عنوان Singleton ثبت می‌شود.
  • از بارگذاری مجدد تنظیمات پشتیبانی می‌کند.
  • مقادیر کش (Cache) شده و بلافاصله پس از تغییر، به‌روز می‌شوند.
  • از گزینه‌های نام‌گذاری‌شده (Named Options) پشتیبانی می‌کند.






Net Developer.
شاید از این پست‌ها خوشتان بیاید