TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #504 152
IValidateOptions<TOptions> و IValidatableObject ✨

کلاس زیر رابط <IValidateOptions<TOptions را پیاده‌سازی می‌کند:
public class MyConfigValidation : IValidateOptions<MyConfigOptions>
{
public MyConfigOptions _config { get; private set; }

public MyConfigValidation(IConfiguration config)
{
_config = config.GetSection(MyConfigOptions.MyConfig)
.Get<MyConfigOptions>();
}

public ValidateOptionsResult Validate(string name, MyConfigOptions options)
{
string? vor = null;
var rx = new Regex(@"^[a-zA-Z''-'\s]{1,40}$");
var match = rx.Match(options.Key1!);

if (string.IsNullOrEmpty(match.Value))
{
vor = $"{options.Key1} doesn't match RegEx \n";
}

if ( options.Key2 < 0 || options.Key2 > 1000)
{
vor = $"{options.Key2} doesn't match Range 0 - 1000 \n";
}

if (_config.Key2 != default)
{
if(_config.Key3 <= _config.Key2)
{
vor += "Key3 must be > than Key2.";
}
}

if (vor != null)
{
return ValidateOptionsResult.Fail(vor);
}

return ValidateOptionsResult.Success;
}
}

ءIValidateOptions این امکان را فراهم می‌کند که کد اعتبارسنجی از فایل Program.cs خارج شده و در یک کلاس قرار گیرد. 🧩

با استفاده از کد بالا، اعتبارسنجی در فایل Program.cs با کد زیر فعال می‌شود:
using Microsoft.Extensions.Options;
using OptionsValidationSample.Configuration;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();

builder.Services.Configure<MyConfigOptions>(builder.Configuration.GetSection(
MyConfigOptions.MyConfig));

builder.Services.AddSingleton<IValidateOptions
<MyConfigOptions>, MyConfigValidation>();

var app = builder.Build();

اعتبارسنجی Options همچنین از IValidatableObject پشتیبانی می‌کند. برای انجام اعتبارسنجی سطح کلاس در داخل خود کلاس:

رابط IValidatableObject و متد Validate را در کلاس پیاده‌سازی کنید.

در Program.cs متد ValidateDataAnnotations را فراخوانی کنید. ✔️

ValidateOnStart 🚀

اعتبارسنجی Options اولین باری که یک نمونه از TOption ساخته می‌شود اجرا می‌گردد. این یعنی مثلاً زمانی‌که اولین دسترسی به IOptionsSnapshot<TOptions>.Value در pipeline یک درخواست رخ می‌دهد یا زمانی‌که IOptionsMonitor<TOptions>.Get(string) فراخوانی می‌شود. پس از reload شدن تنظیمات، اعتبارسنجی دوباره اجرا می‌شود.
زمان اجرا از OptionsCache<TOptions> برای کش کردن نمونه ساخته‌شده استفاده می‌کند.

برای اجرای اعتبارسنجی هنگام شروع اپلیکیشن (Eager Validation) باید در Program.cs متد زیر را فراخوانی کنید:
builder.Services.AddOptions<MyConfigOptions>()
.Bind(builder.Configuration.GetSection(MyConfigOptions.MyConfig))
.ValidateDataAnnotations()
.ValidateOnStart();


Options post-configuration 🛠
ءPost-configuration را می‌توان با <IPostConfigureOptions<TOptions انجام داد. Post-configuration پس از اجرای تمام <IConfigureOptions<TOptions انجام می‌شود:
using OptionsValidationSample.Configuration;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();

builder.Services.AddOptions<MyConfigOptions>()
.Bind(builder.Configuration.GetSection(MyConfigOptions.MyConfig));

builder.Services.PostConfigure<MyConfigOptions>(myOptions =>
{
myOptions.Key1 = "post_configured_key1_value";
});
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →