Files
MeWeb/src/MeWeb.App/AppServices.cs
T

41 lines
1.7 KiB
C#
Raw Normal View History

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<IHttpClientFactory>();
return new ServerProbe(factory.CreateClient(Secure), factory.CreateClient(Plain));
});
services.AddSingleton<KnowledgeBase>();
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<IPlatform>(), sp.GetRequiredService<ServerProbe>(), sp.GetRequiredService<KnowledgeBase>(),
sp.GetRequiredService<HistoryStore>(), sp.GetRequiredService<IHttpClientFactory>().CreateClient(Secure), folder));
services.AddSingleton<Reach>();
services.AddTransient<MainViewModel>();
return services;
}
}