📄 MatDenDagen/SmsSenderServiceExtensions.cs
using System;
using System.ComponentModel.DataAnnotations;
using HuaweiWifiSms.Grpc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;

namespace MatDenDagen;

public static class SmsSenderServiceExtensions
{
    public static IServiceCollection AddSmsSenderClient(this IServiceCollection services)
    {
        services.AddOptions<SmsSenderOptions>().BindConfiguration("SmsSender").ValidateOnStart();
        services.AddTransient<IValidateOptions<SmsSenderOptions>, SmsSenderOptionsValidator>();

        services
            .AddGrpcClient<SmsSender.SmsSenderClient>()
            .ConfigureHttpClient(
                (sp, client) =>
                    client.BaseAddress = sp.GetRequiredService<IOptions<SmsSenderOptions>>().Value.BaseAddress
            );

        return services;
    }
}

public sealed class SmsSenderOptions
{
    [Required]
    public required Uri BaseAddress { get; init; }
}

[OptionsValidator]
public sealed partial class SmsSenderOptionsValidator : IValidateOptions<SmsSenderOptions>;