📄 ServiceCollectionExtensions.cs
using System.Net.Http.Headers;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using MSearch.Domain;

namespace MSearch.SearchProviders.TheMovieDb;

public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddTheMovieDbSearchProvider(this IServiceCollection services)
    {
        services.AddOptions<TheMovieDbOptions>().BindConfiguration("SearchProviders:TheMovieDb").ValidateOnStart();
        services.AddTransient<IValidateOptions<TheMovieDbOptions>, TheMovieDbOptionsValidator>();

        services.AddHttpClient<ISearchProvider, TheMovieDbSearchProvider>(
            nameof(TheMovieDbSearchProvider),
            (sp, httpClient) =>
            {
                var options = sp.GetRequiredService<IOptions<TheMovieDbOptions>>();
                httpClient.BaseAddress = new("https://api.themoviedb.org/");
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
                    "Bearer",
                    options.Value.ApiKey
                );
            }
        );

        return services;
    }
}