using MeWeb.App.ViewModels; using MeWeb.Core.Checks; using MeWeb.Core.History; using MeWeb.Core.Knowledge; using MeWeb.Core.Net; using MeWeb.Core.Router; using MeWeb.Shared; using Microsoft.Extensions.DependencyInjection; namespace MeWeb.App; public static class AppServices { public const string Secure = "secure"; public const string Plain = "plain"; public static IServiceCollection AddMeWebApp(this IServiceCollection services, IPlatform platform) { var agent = $"me-web/{BuildInfo.Version}"; services.AddHttpClient(Secure, http => http.DefaultRequestHeaders.UserAgent.ParseAdd(agent)); services.AddHttpClient(Plain, http => http.DefaultRequestHeaders.UserAgent.ParseAdd(agent)) .ConfigurePrimaryHttpMessageHandler(() => new SocketsHttpHandler { AllowAutoRedirect = false }); services.AddSingleton(platform); services.AddSingleton(sp => { var factory = sp.GetRequiredService(); return new ServerProbe(factory.CreateClient(Secure), factory.CreateClient(Plain)); }); services.AddSingleton(); var folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MeWeb"); services.AddSingleton(new HistoryStore(folder)); services.AddSingleton(new Leftovers(folder)); services.AddSingleton(new Submissions(folder)); services.AddSingleton(sp => new CheckRunner(sp.GetRequiredService(), sp.GetRequiredService(), sp.GetRequiredService(), sp.GetRequiredService(), sp.GetRequiredService().CreateClient(Secure), folder)); services.AddSingleton(); services.AddTransient(); return services; } }