using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using TheLivingWorld.Osm.Import; using TheLivingWorld.Osm.Overpass; namespace TheLivingWorld.Osm; public static class OsmServiceCollectionExtensions { /// /// Registers the OpenStreetMap import pipeline. The returned builder is the Overpass HTTP client, which /// callers usually need to adjust: Overpass queries run for minutes and do not fit default HTTP policies. /// public static IHttpClientBuilder AddOsmImport(this IServiceCollection services, IConfiguration configuration) { services.AddOptions() .Bind(configuration.GetSection(OsmOptions.SectionName)); services.AddSingleton(); services.AddSingleton(); return services.AddHttpClient(OverpassClient.HttpClientName, static (provider, client) => { var options = provider.GetRequiredService>().Value; client.Timeout = TimeSpan.FromSeconds(options.RequestTimeoutSeconds); client.DefaultRequestHeaders.UserAgent.ParseAdd(options.UserAgent); }); } }