TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #358 206
🛠 ساخت متدهای Extension برای ادغام آسان

حالا بیایید چند extension method بسازیم تا استفاده از FluentValidation در Options Pattern راحت‌تر شود:
public static class OptionsBuilderExtensions
{
public static OptionsBuilder<TOptions> ValidateFluentValidation<TOptions>(
this OptionsBuilder<TOptions> builder)
where TOptions : class
{
builder.Services.AddSingleton<IValidateOptions<TOptions>>(
serviceProvider => new FluentValidateOptions<TOptions>(
serviceProvider,
builder.Name));

return builder;
}
}

این extension method به ما امکان می‌دهد هنگام کانفیگ Options، متد ()ValidateFluentValidation را فراخوانی کنیم، مشابه متد داخلی ()ValidateDataAnnotations.

برای راحتی بیشتر، می‌توانیم یک extension method دیگر بسازیم تا کل فرآیند کانفیگ را ساده کند:
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddOptionsWithFluentValidation<TOptions>(
this IServiceCollection services,
string configurationSection)
where TOptions : class
{
services.AddOptions<TOptions>()
.BindConfiguration(configurationSection)
.ValidateFluentValidation() // کانفیگ FluentValidation
.ValidateOnStart(); // اعتبارسنجی در هنگام شروع برنامه

return services;
}
}


📝 ثبت و استفاده از اعتبارسنجی

چند روش برای استفاده از این ادغام FluentValidation وجود دارد:

1️⃣: ثبت استاندارد با ثبت دستی Validator
// ثبت Validator
builder.Services.AddScoped<IValidator<GitHubSettings>, GitHubSettingsValidator>();

// کانفیگ Options با اعتبارسنجی
builder.Services.AddOptions<GitHubSettings>()
.BindConfiguration(GitHubSettings.ConfigurationSection)
.ValidateFluentValidation() // فعال کردن FluentValidation
.ValidateOnStart();

2️⃣: استفاده از Extension راحت
// ثبت Validator
builder.Services.AddScoped<IValidator<GitHubSettings>, GitHubSettingsValidator>();

// استفاده از Extension راحت
builder.Services.AddOptionsWithFluentValidation<GitHubSettings>(GitHubSettings.ConfigurationSection);

3️⃣: ثبت خودکار Validatorها
اگر Validatorهای زیادی دارید و می‌خواهید همه را یکجا ثبت کنید، می‌توانید از assembly scanning استفاده کنید:
// ثبت همه Validatorها از assembly
builder.Services.AddValidatorsFromAssembly(typeof(Program).Assembly);

// استفاده از Extension راحت
builder.Services.AddOptionsWithFluentValidation<GitHubSettings>(GitHubSettings.ConfigurationSection);


⚡️ اتفاقات هنگام اجرای برنامه

با ()ValidateOnStart، اگر هر قانونی نقض شود، برنامه هنگام startup یک استثنا پرتاب می‌کند.
مثال: اگر در appsettings.json مقدار AccessToken موجود نباشد، پیام خطا شبیه زیر خواهد بود:
Microsoft.Extensions.Options.OptionsValidationException:
Validation failed for GitHubSettings.AccessToken with the error: 'Access Token' must not be empty.

این کار از شروع برنامه با پیکربندی اشتباه جلوگیری می‌کند و اطمینان حاصل می‌کند که مشکلات در اوایل چرخه توسعه شناسایی شوند. ✅
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 →