📄 ServiceCollectionExtensions.cs
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
using MSearch.Domain;

namespace MSearch.SearchProviders.Wikipedia;

public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddWikipediaSearchProvider(this IServiceCollection services, string site)
    {
        services.AddOptions<WikipediaOptions>(site).Configure(o => o.Site = site);
        services.TryAddTransient<IValidateOptions<WikipediaOptions>, WikipediaOptionsValidator>();

        services.AddHttpClient<ISearchProvider, WikipediaSearchProvider>(
            nameof(WikipediaSearchProvider),
            (httpClient, sp) =>
                new WikipediaSearchProvider(
                    Options.Create(sp.GetRequiredService<IOptionsMonitor<WikipediaOptions>>().Get(site)),
                    httpClient
                )
        );

        return services;
    }
}