Roadmap › Design Patterns (GoF + Enterprise) in C# › Module: Enterprise and Cloud Patterns
Lessons in this course (18)

18. Options pattern and other .NET-specific patterns

IntermediateMediumLesson 18 of 18
csharp
public class SmtpSettings { public string Host { get; set; } = ""; public int Port { get; set; } }
builder.Services.Configure<SmtpSettings>(builder.Configuration.GetSection("Smtp"));
builder.Services.AddOptions<SmtpSettings>().BindConfiguration("Smtp").ValidateDataAnnotations().ValidateOnStart();

public class Mailer(IOptions<SmtpSettings> opt) { private readonly SmtpSettings _s = opt.Value; }

IOptions<T> (singleton, read once), IOptionsSnapshot<T> (scoped, re-read per request), IOptionsMonitor<T> (singleton with change notifications).

Also: Specification pattern (encapsulate query criteria), Result pattern (return success/failure objects instead of throwing for expected errors), Null Object, Lazy loading.