using LANCommander.SDK; using LANCommander.SDK.Abstractions; using LANCommander.SDK.Interceptors; using LANCommander.SDK.Models; using LANCommander.SDK.PowerShell; using LANCommander.SDK.Services; using LANCommander.Server.Services.Abstractions; using LANCommander.Server.Services.Factories; using LANCommander.Server.Services.Interceptors; using LANCommander.Server.Services.MediaGrabbers; using LANCommander.Server.Services.PowerShell; using LANCommander.HQ.SDK; using LANCommander.Server.Services.Providers; using LANCommander.Server.Services.Providers.Metadata; using LANCommander.Server.Services.ServerEngines; using Microsoft.Extensions.DependencyInjection; namespace LANCommander.Server.Services.Extensions; public static class IServiceCollectionExtensions { public static IServiceCollection AddLANCommanderServer(this IServiceCollection services) { services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(sp => { var settings = sp.GetRequiredService>(); var hqSettings = settings.CurrentValue.Server.HQ; return new HQClient(new HQClientOptions { BaseAddress = new Uri(hqSettings.BaseUrl), Token = hqSettings.IsAuthenticated ? hqSettings.AccessToken : null, }); }); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddTransient(); // Register metadata providers services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); // Register server engines services.AddSingleton(); services.AddSingleton(); services.AddSingleton(provider => provider.GetService()); services.AddSingleton(); services.AddSingleton(provider => provider.GetService()); services.AddSingleton(); services.AddSingleton(); services.AddHostedService(); services.AddSingleton(); services.AddSingleton(sp => sp.GetRequiredService()); services.AddSingleton(); services.AddSingleton(); // Mapperly mappers (stateless, thread-safe compile-time source generators). services.AddSingleton(); services.AddSingleton(); services.AddFusionCache(); return services; } }