TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #357 155
🏗 ساخت یکپارچه‌سازی FluentValidation

برای ادغام FluentValidation با Options Pattern، نیاز داریم یک پیاده‌سازی سفارشی از <IValidateOptions<T بسازیم:
using FluentValidation;
using Microsoft.Extensions.Options;

public class FluentValidateOptions<TOptions>
: IValidateOptions<TOptions>
where TOptions : class
{
private readonly IServiceProvider _serviceProvider;
private readonly string? _name;

public FluentValidateOptions(IServiceProvider serviceProvider, string? name)
{
_serviceProvider = serviceProvider;
_name = name;
}

public ValidateOptionsResult Validate(string? name, TOptions options)
{
if (_name is not null && _name != name)
{
return ValidateOptionsResult.Skip;
}

ArgumentNullException.ThrowIfNull(options);

using var scope = _serviceProvider.CreateScope();

var validator = scope.ServiceProvider.GetRequiredService<IValidator<TOptions>>();

var result = validator.Validate(options);
if (result.IsValid)
{
return ValidateOptionsResult.Success;
}

var type = options.GetType().Name;
var errors = new List<string>();

foreach (var failure in result.Errors)
{
errors.Add($"Validation failed for {type}.{failure.PropertyName} " +
$"with the error: {failure.ErrorMessage}");
}

return ValidateOptionsResult.Fail(errors);
}
}


📝 نکات مهم درباره این پیاده‌سازی

یک scoped service provider ساخته می‌شود تا Validator به درستی Resolve شود (چون Validatorها معمولاً به صورت Scoped ثبت می‌شوند).

گزینه‌های دارای نام با استفاده از پراپرتی _name مدیریت می‌شوند.

پیام‌های خطای دقیق و اطلاعاتی ساخته می‌شوند که شامل نام پراپرتی و پیام خطا هستند.

⚙️ نحوه عملکرد یکپارچه‌سازی FluentValidation

• اینترفیس <IValidateOptions<T نقطه اتصال ASP.NET Core برای اعتبارسنجی Options است.

• کلاس <FluentValidateOptions<T این اینترفیس را پیاده‌سازی می‌کند تا ارتباط با FluentValidation برقرار شود.

• وقتی ()ValidateOnStart فراخوانی می‌شود، ASP.NET Core همه پیاده‌سازی‌های <IValidateOptions<T را Resolve کرده و اجرا می‌کند.

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