LANCommander/LANCommander.Server.Services/Extensions/IServiceCollectionExtensions.cs
Pat Hartl f87756243e Add support for defining PowerShell modules
Adds a new section "Scripting" in the server UI where PowerShell modules can be defined. These can be used for defining a library of functions that can be used in any script. These modules are automatically synced to the launcher and imported upon script execution.
2026-06-28 23:02:35 -05:00

117 lines
No EOL
5 KiB
C#

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<IGitHubService, GitHubService>();
services.AddScoped<IdentityContextFactory>();
services.AddScoped<AuthenticationService>();
services.AddScoped<ArchiveService>();
services.AddScoped<IArchiveClient, ArchiveService>();
services.AddScoped<StorageLocationService>();
services.AddScoped<ActionService>();
services.AddScoped<CategoryService>();
services.AddScoped<CollectionService>();
services.AddScoped<GameService>();
services.AddScoped<LibraryService>();
services.AddScoped<ScriptService>();
services.AddScoped<ModuleService>();
services.AddScoped<GenreService>();
services.AddScoped<PlatformService>();
services.AddScoped<KeyService>();
services.AddScoped<TagService>();
services.AddScoped<EngineService>();
services.AddScoped<CompanyService>();
services.AddScoped<MultiplayerModeService>();
services.AddScoped<ServerService>();
services.AddScoped<ServerHttpPathService>();
services.AddScoped<ServerConsoleService>();
services.AddScoped<GameSaveService>();
services.AddScoped<SavePathService>();
services.AddScoped<PlaySessionService>();
services.AddScoped<MediaService>();
services.AddScoped<RedistributableService>();
services.AddScoped<ConfigToOptionSchemaService>();
services.AddScoped<ToolService>();
services.AddScoped(sp =>
{
var settings = sp.GetRequiredService<SettingsProvider<Settings.Settings>>();
var hqSettings = settings.CurrentValue.Server.HQ;
return new HQClient(new HQClientOptions
{
BaseAddress = new Uri(hqSettings.BaseUrl),
Token = hqSettings.IsAuthenticated ? hqSettings.AccessToken : null,
});
});
services.AddScoped<HqMediaGrabber>();
services.AddScoped<SteamMediaGrabber>();
services.AddScoped<SteamGridDBMediaGrabber>();
services.AddScoped<YouTubeMediaGrabber>();
services.AddScoped<IMediaGrabberService, CompositeMediaGrabberService>();
services.AddScoped<MediaToolService>();
services.AddScoped<UpdateService>();
services.AddScoped<IssueService>();
services.AddScoped<PageService>();
services.AddScoped<UserService>();
services.AddScoped<RoleService>();
services.AddScoped<UserCustomFieldService>();
services.AddScoped<GameCustomFieldService>();
services.AddScoped<ChatService>();
services.AddScoped<ChatMessageService>();
services.AddScoped<ChatThreadService>();
services.AddScoped<ChatThreadReadStatusService>();
services.AddScoped<DepotService>();
services.AddScoped<RatingService>();
services.AddTransient<SetupService>();
// Register metadata providers
services.AddScoped<MetadataService>();
services.AddScoped<IMetadataProvider, HqMetadataProvider>();
services.AddScoped<IMetadataProvider, IgdbMetadataProvider>();
services.AddScoped<IMetadataProvider, PcGamingWikiMetadataProvider>();
// Register server engines
services.AddSingleton<IServerEngine, LocalServerEngine>();
services.AddSingleton<DockerServerEngine>();
services.AddSingleton<IServerEngine>(provider => provider.GetService<DockerServerEngine>());
services.AddSingleton<RemoteServerEngine>();
services.AddSingleton<IServerEngine>(provider => provider.GetService<RemoteServerEngine>());
services.AddSingleton<ServerManager>();
services.AddSingleton<PlaySessionKeepAliveTracker>();
services.AddHostedService<PlaySessionSweepService>();
services.AddSingleton<ScriptDebugger>();
services.AddSingleton<IScriptDebugger>(sp =>
sp.GetRequiredService<ScriptDebugger>());
services.AddSingleton<IPXRelayService>();
services.AddSingleton<IBeaconMessageInterceptor, BeaconMessageInterceptor>();
services.AddAutoMapper(cfg => { }, typeof(MappingProfile));
services.AddFusionCache();
return services;
}
}