Files
mahdium 8db845f27a feat: utilize IHttpClientFactory for improved HTTP client management
- Replaced direct `HttpClient` dependencies with `IHttpClientFactory` in `GithubService`, `ForgejoService`, and `ReleaseAssetDownloadService`.
- Added DI-configured HTTP client registrations for GitHub, Forgejo, and asset downloads in `Program.cs`.
- Consolidated HTTP client setup to enhance maintainability, configurability, and resource lifecycle management.
2026-11-04 17:05:41 +03:30

45 lines
1.5 KiB
C#

using System.Net.Http.Headers;
using ForgejoReleaseSync.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
var config = AppConfigLoader.LoadConfigFromEnv();
builder.Services.AddSingleton(config);
var repositoryConfig = await RepoConfigLoader.LoadConfigAsync(config.RepositoryConfigFilePath);
builder.Services.AddSingleton(repositoryConfig);
builder.Services.AddHttpClient("github", client =>
{
client.BaseAddress = new Uri("https://api.github.com/");
client.DefaultRequestHeaders.UserAgent.ParseAdd("ForgejoReleaseSync");
client.DefaultRequestHeaders.Accept.ParseAdd("application/vnd.github+json");
});
builder.Services.AddHttpClient("forgejo", client =>
{
client.BaseAddress = new Uri(config.ForgejoInstacne.TrimEnd('/') + "/");
client.DefaultRequestHeaders.UserAgent.ParseAdd("ForgejoReleaseSync");
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("token", config.ForgejoToken);
});
builder.Services.AddHttpClient("asset-download", client =>
{
client.DefaultRequestHeaders.UserAgent.ParseAdd("ForgejoReleaseSync");
});
builder.Services.AddSingleton<GithubService>();
builder.Services.AddSingleton<ForgejoService>();
builder.Services.AddSingleton<ReleaseAssetDownloadService>();
builder.Services.AddSingleton<SyncService>();
var app = builder.Build();
using var scope = app.Services.CreateScope();
await scope.ServiceProvider
.GetRequiredService<SyncService>()
.Sync();