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

namespace MSearch.SearchProviders.GitHub;

public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddGitHubSearchProvider(this IServiceCollection services)
    {
        services.AddHttpClient(
            nameof(GitHubSearchProvider),
            httpClient =>
            {
                httpClient.BaseAddress = new("https://api.github.com/");
                httpClient.DefaultRequestHeaders.Accept.ParseAdd("application/vnd.github+json");
                httpClient.DefaultRequestHeaders.Add("X-GitHub-Api-Version", "2022-11-28");
            }
        );

        services.AddTransient<ISearchProvider>(sp => new GitHubSearchProvider(
            sp.GetRequiredService<IHttpClientFactory>().CreateClient(nameof(GitHubSearchProvider)),
            "issues"
        ));

        services.AddTransient<ISearchProvider>(sp => new GitHubSearchProvider(
            sp.GetRequiredService<IHttpClientFactory>().CreateClient(nameof(GitHubSearchProvider)),
            "repositories"
        ));

        return services;
    }
}