diff --git a/LightlessSync/Plugin.cs b/LightlessSync/Plugin.cs index 8f6031c..d1f3b6d 100644 --- a/LightlessSync/Plugin.cs +++ b/LightlessSync/Plugin.cs @@ -96,279 +96,450 @@ public sealed class Plugin : IDalamudPlugin }); lb.SetMinimumLevel(LogLevel.Trace); }) - .ConfigureServices(collection => + .ConfigureServices(services => + { + var configDir = pluginInterface.ConfigDirectory.FullName; + + // Core infrastructure + services.AddSingleton(new WindowSystem("LightlessSync")); + services.AddSingleton(); + services.AddSingleton(new Dalamud.Localization("LightlessSync.Localization.", string.Empty, useEmbedded: true)); + services.AddSingleton(gameGui); + services.AddSingleton(addonLifecycle); + + // Core singletons + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + services.AddSingleton(sp => + new TextureMetadataHelper(sp.GetRequiredService>(), gameData)); + + services.AddSingleton(sp => new Lazy(() => sp.GetRequiredService())); + + services.AddSingleton(sp => new PairFactory( + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + new Lazy(() => sp.GetRequiredService()), + sp.GetRequiredService>())); + + services.AddSingleton(sp => new TransientResourceManager( + sp.GetRequiredService>(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + // Lightless Chara data + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + // Game / VFX / IPC + services.AddSingleton(sp => new VfxSpawnManager( + sp.GetRequiredService>(), + gameInteropProvider, + sp.GetRequiredService())); + + services.AddSingleton(sp => new BlockedCharacterHandler( + sp.GetRequiredService>(), + gameInteropProvider)); + + services.AddSingleton(sp => new IpcProvider( + sp.GetRequiredService>(), + pluginInterface, + sp.GetRequiredService(), + sp.GetRequiredService())); + + // Tag (Groups) UIs + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + // Eventing / utilities + services.AddSingleton(sp => new EventAggregator( + configDir, + sp.GetRequiredService>(), + sp.GetRequiredService())); + + services.AddSingleton(sp => new ActorObjectService( + sp.GetRequiredService>(), + framework, + gameInteropProvider, + objectTable, + clientState, + sp.GetRequiredService())); + + services.AddSingleton(sp => new DalamudUtilService( + sp.GetRequiredService>(), + clientState, + objectTable, + framework, + gameGui, + condition, + gameData, + targetManager, + gameConfig, + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + new Lazy(() => sp.GetRequiredService()))); + + // Pairing and Dtr integration + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + services.AddSingleton(sp => new PairHandlerRegistry( + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService>())); + + services.AddSingleton(sp => new DtrEntry( + sp.GetRequiredService>(), + dtrBar, + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddSingleton(sp => new PairCoordinator( + sp.GetRequiredService>(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + // Light finder / redraw / context menu + services.AddSingleton(); + services.AddSingleton(); + + services.AddSingleton(sp => new LightFinderPlateHandler( + sp.GetRequiredService>(), + sp.GetRequiredService(), + pluginInterface, + sp.GetRequiredService(), + objectTable, + gameGui)); + + services.AddSingleton(sp => new LightFinderScannerService( + sp.GetRequiredService>(), + framework, + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddSingleton(sp => new ContextMenuService( + contextMenu, + pluginInterface, + gameData, + sp.GetRequiredService>(), + sp.GetRequiredService(), + sp.GetRequiredService(), + objectTable, + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + clientState, + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + // IPC callers / manager + services.AddSingleton(sp => new IpcCallerPenumbra( + sp.GetRequiredService>(), + pluginInterface, + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddSingleton(sp => new IpcCallerGlamourer( + sp.GetRequiredService>(), + pluginInterface, + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddSingleton(sp => new IpcCallerCustomize( + sp.GetRequiredService>(), + pluginInterface, + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddSingleton(sp => new IpcCallerHeels( + sp.GetRequiredService>(), + pluginInterface, + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddSingleton(sp => new IpcCallerHonorific( + sp.GetRequiredService>(), + pluginInterface, + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddSingleton(sp => new IpcCallerMoodles( + sp.GetRequiredService>(), + pluginInterface, + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddSingleton(sp => new IpcCallerPetNames( + sp.GetRequiredService>(), + pluginInterface, + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddSingleton(sp => new IpcCallerBrio( + sp.GetRequiredService>(), + pluginInterface, + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddSingleton(sp => new IpcManager( + sp.GetRequiredService>(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + // Notifications / HTTP + services.AddSingleton(sp => new NotificationService( + sp.GetRequiredService>(), + sp.GetRequiredService(), + sp.GetRequiredService(), + notificationManager, + chatGui, + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddSingleton(sp => { - collection.AddSingleton(new WindowSystem("LightlessSync")); - collection.AddSingleton(); - collection.AddSingleton(new Dalamud.Localization("LightlessSync.Localization.", "", useEmbedded: true)); - collection.AddSingleton(gameGui); + var httpClient = new HttpClient(); + var ver = Assembly.GetExecutingAssembly().GetName().Version; + httpClient.DefaultRequestHeaders.UserAgent.Add( + new ProductInfoHeaderValue("LightlessSync", $"{ver!.Major}.{ver.Minor}.{ver.Build}")); + return httpClient; + }); - // add lightless related singletons - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(s => - { - var logger = s.GetRequiredService>(); - return new TextureMetadataHelper(logger, gameData); - }); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(s => new PairFactory( - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - new Lazy(() => s.GetRequiredService()), - s.GetRequiredService>())); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(s => new Lazy(() => s.GetRequiredService())); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(s => new TransientResourceManager(s.GetRequiredService>(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService())); + // Lightless Config services + services.AddSingleton(sp => new UiThemeConfigService(configDir)); + services.AddSingleton(sp => new ChatConfigService(configDir)); + services.AddSingleton(sp => + { + var cfg = new LightlessConfigService(configDir); + var theme = sp.GetRequiredService(); + LightlessSync.UI.Style.MainStyle.Init(cfg, theme); + return cfg; + }); + services.AddSingleton(sp => new ServerConfigService(configDir)); + services.AddSingleton(sp => new NotesConfigService(configDir)); + services.AddSingleton(sp => new PairTagConfigService(configDir)); + services.AddSingleton(sp => new SyncshellTagConfigService(configDir)); + services.AddSingleton(sp => new TransientConfigService(configDir)); + services.AddSingleton(sp => new XivDataStorageService(configDir)); + services.AddSingleton(sp => new PlayerPerformanceConfigService(configDir)); + services.AddSingleton(sp => new CharaDataConfigService(configDir)); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); + // Config adapters + services.AddSingleton>(sp => sp.GetRequiredService()); + services.AddSingleton>(sp => sp.GetRequiredService()); + services.AddSingleton>(sp => sp.GetRequiredService()); + services.AddSingleton>(sp => sp.GetRequiredService()); + services.AddSingleton>(sp => sp.GetRequiredService()); + services.AddSingleton>(sp => sp.GetRequiredService()); + services.AddSingleton>(sp => sp.GetRequiredService()); + services.AddSingleton>(sp => sp.GetRequiredService()); + services.AddSingleton>(sp => sp.GetRequiredService()); + services.AddSingleton>(sp => sp.GetRequiredService()); + services.AddSingleton>(sp => sp.GetRequiredService()); - collection.AddSingleton(s => new VfxSpawnManager(s.GetRequiredService>(), - gameInteropProvider, s.GetRequiredService())); - collection.AddSingleton((s) => new BlockedCharacterHandler(s.GetRequiredService>(), gameInteropProvider)); - collection.AddSingleton((s) => new IpcProvider(s.GetRequiredService>(), - pluginInterface, - s.GetRequiredService(), - s.GetRequiredService())); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton((s) => new EventAggregator(pluginInterface.ConfigDirectory.FullName, - s.GetRequiredService>(), s.GetRequiredService())); - collection.AddSingleton((s) => new DalamudUtilService(s.GetRequiredService>(), - clientState, objectTable, framework, gameGui, condition, gameData, targetManager, gameConfig, - s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), - s.GetRequiredService(), s.GetRequiredService(), new Lazy(() => s.GetRequiredService()))); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(s => new PairHandlerRegistry( - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService>())); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton((s) => new DtrEntry( - s.GetRequiredService>(), - dtrBar, - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService())); - collection.AddSingleton(s => new PairCoordinator( - s.GetRequiredService>(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService())); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(addonLifecycle); - collection.AddSingleton(p => new ContextMenuService(contextMenu, pluginInterface, gameData, p.GetRequiredService>(), p.GetRequiredService(), p.GetRequiredService(), objectTable, - p.GetRequiredService(), - p.GetRequiredService(), - p.GetRequiredService(), - clientState, - p.GetRequiredService(), - p.GetRequiredService(), - p.GetRequiredService(), - p.GetRequiredService())); - collection.AddSingleton((s) => new IpcCallerPenumbra(s.GetRequiredService>(), pluginInterface, - s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), - s.GetRequiredService())); - collection.AddSingleton((s) => new IpcCallerGlamourer(s.GetRequiredService>(), pluginInterface, - s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService())); - collection.AddSingleton((s) => new IpcCallerCustomize(s.GetRequiredService>(), pluginInterface, - s.GetRequiredService(), s.GetRequiredService())); - collection.AddSingleton((s) => new IpcCallerHeels(s.GetRequiredService>(), pluginInterface, - s.GetRequiredService(), s.GetRequiredService())); - collection.AddSingleton((s) => new IpcCallerHonorific(s.GetRequiredService>(), pluginInterface, - s.GetRequiredService(), s.GetRequiredService())); - collection.AddSingleton((s) => new IpcCallerMoodles(s.GetRequiredService>(), pluginInterface, - s.GetRequiredService(), s.GetRequiredService())); - collection.AddSingleton((s) => new IpcCallerPetNames(s.GetRequiredService>(), pluginInterface, - s.GetRequiredService(), s.GetRequiredService())); - collection.AddSingleton((s) => new IpcCallerBrio(s.GetRequiredService>(), pluginInterface, - s.GetRequiredService(), s.GetRequiredService())); - collection.AddSingleton((s) => new IpcManager(s.GetRequiredService>(), - s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), - s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), - s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService())); - collection.AddSingleton((s) => new NotificationService( - s.GetRequiredService>(), - s.GetRequiredService(), - s.GetRequiredService(), - notificationManager, - chatGui, - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService())); - collection.AddSingleton((s) => - { - var httpClient = new HttpClient(); - var ver = Assembly.GetExecutingAssembly().GetName().Version; - httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("LightlessSync", ver!.Major + "." + ver!.Minor + "." + ver!.Build)); - return httpClient; - }); - collection.AddSingleton((s) => new UiThemeConfigService(pluginInterface.ConfigDirectory.FullName)); - collection.AddSingleton((s) => new ChatConfigService(pluginInterface.ConfigDirectory.FullName)); - collection.AddSingleton((s) => - { - var cfg = new LightlessConfigService(pluginInterface.ConfigDirectory.FullName); - var theme = s.GetRequiredService(); - LightlessSync.UI.Style.MainStyle.Init(cfg, theme); - return cfg; - }); - collection.AddSingleton((s) => new ServerConfigService(pluginInterface.ConfigDirectory.FullName)); - collection.AddSingleton((s) => new NotesConfigService(pluginInterface.ConfigDirectory.FullName)); - collection.AddSingleton((s) => new PairTagConfigService(pluginInterface.ConfigDirectory.FullName)); - collection.AddSingleton((s) => new SyncshellTagConfigService(pluginInterface.ConfigDirectory.FullName)); - collection.AddSingleton((s) => new TransientConfigService(pluginInterface.ConfigDirectory.FullName)); - collection.AddSingleton((s) => new XivDataStorageService(pluginInterface.ConfigDirectory.FullName)); - collection.AddSingleton((s) => new PlayerPerformanceConfigService(pluginInterface.ConfigDirectory.FullName)); - collection.AddSingleton((s) => new CharaDataConfigService(pluginInterface.ConfigDirectory.FullName)); - collection.AddSingleton>(s => s.GetRequiredService()); - collection.AddSingleton>(s => s.GetRequiredService()); - collection.AddSingleton>(s => s.GetRequiredService()); - collection.AddSingleton>(s => s.GetRequiredService()); - collection.AddSingleton>(s => s.GetRequiredService()); - collection.AddSingleton>(s => s.GetRequiredService()); - collection.AddSingleton>(s => s.GetRequiredService()); - collection.AddSingleton>(s => s.GetRequiredService()); - collection.AddSingleton>(s => s.GetRequiredService()); - collection.AddSingleton>(s => s.GetRequiredService()); - collection.AddSingleton>(s => s.GetRequiredService()); - collection.AddSingleton(); - collection.AddSingleton(); - collection.AddSingleton(sp => new ActorObjectService( - sp.GetRequiredService>(), - framework, - gameInteropProvider, - objectTable, - clientState, - sp.GetRequiredService())); - collection.AddSingleton(); - collection.AddSingleton(s => new LightFinderScannerService(s.GetRequiredService>(), framework, s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService())); - collection.AddSingleton((s) => new LightFinderPlateHandler(s.GetRequiredService>(), - s.GetRequiredService(), pluginInterface, - s.GetRequiredService(), - objectTable, gameGui)); + services.AddSingleton(); + services.AddSingleton(); - // add scoped services - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); + // Scoped factories / UI + 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(); - collection.AddScoped((s) => new EditProfileUi(s.GetRequiredService>(), - s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), - s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService())); - collection.AddScoped(); - collection.AddScoped((s) => new LightFinderUI(s.GetRequiredService>(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService())); - collection.AddScoped((s) => new SyncshellFinderUI(s.GetRequiredService>(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService())); - collection.AddScoped(); - collection.AddScoped((s) => - new LightlessNotificationUi( - s.GetRequiredService>(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService())); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped(); - collection.AddScoped((s) => new UiService(s.GetRequiredService>(), pluginInterface.UiBuilder, s.GetRequiredService(), - s.GetRequiredService(), s.GetServices(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService(), - s.GetRequiredService())); - collection.AddScoped((s) => new CommandManagerService(commandManager, s.GetRequiredService(), - s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), - s.GetRequiredService(), s.GetRequiredService())); - collection.AddScoped((s) => new UiSharedService(s.GetRequiredService>(), s.GetRequiredService(), s.GetRequiredService(), - s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), - pluginInterface, textureProvider, s.GetRequiredService(), s.GetRequiredService(), s.GetRequiredService(), - s.GetRequiredService())); - collection.AddScoped((s) => new NameplateService(s.GetRequiredService>(), s.GetRequiredService(), clientState, gameGui, objectTable, gameInteropProvider, - s.GetRequiredService(), s.GetRequiredService())); + services.AddScoped(sp => new EditProfileUi( + sp.GetRequiredService>(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - collection.AddHostedService(p => p.GetRequiredService()); - }) - .Build(); + services.AddScoped(); + + services.AddScoped(sp => new LightFinderUI( + sp.GetRequiredService>(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddScoped(sp => new SyncshellFinderUI( + sp.GetRequiredService>(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddScoped(); + services.AddScoped(); + + services.AddScoped(sp => + new LightlessNotificationUi( + sp.GetRequiredService>(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + + services.AddScoped(sp => new UiService( + sp.GetRequiredService>(), + pluginInterface.UiBuilder, + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetServices(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddScoped(sp => new CommandManagerService( + commandManager, + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddScoped(sp => new UiSharedService( + sp.GetRequiredService>(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + pluginInterface, + textureProvider, + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService())); + + services.AddScoped(sp => new NameplateService( + sp.GetRequiredService>(), + sp.GetRequiredService(), + clientState, + gameGui, + objectTable, + gameInteropProvider, + sp.GetRequiredService(), + sp.GetRequiredService())); + + // Hosted services + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + services.AddHostedService(sp => sp.GetRequiredService()); + }).Build(); _ = _host.StartAsync(); }