using Dalamud.Plugin; using Microsoft.Extensions.DependencyInjection; using OtterGui.Classes; using OtterGui.Log; using CustomizePlus.Profiles; using CustomizePlus.Core.Services; using CustomizePlus.UI.Windows.MainWindow.Tabs.Debug; using CustomizePlus.Game.Services; using CustomizePlus.Configuration.Services; using CustomizePlus.Templates; using CustomizePlus.UI.Windows.MainWindow.Tabs.Templates; using CustomizePlus.Armatures.Events; using CustomizePlus.Configuration.Data; using CustomizePlus.Core.Events; using CustomizePlus.UI; using CustomizePlus.UI.Windows.Controls; using CustomizePlus.Anamnesis; using CustomizePlus.Armatures.Services; using CustomizePlus.UI.Windows.MainWindow.Tabs.Profiles; using CustomizePlus.UI.Windows.MainWindow; using CustomizePlus.Game.Events; using CustomizePlus.UI.Windows; using CustomizePlus.UI.Windows.MainWindow.Tabs; using CustomizePlus.Templates.Events; using CustomizePlus.Profiles.Events; using CustomizePlus.Api.Compatibility; using CustomizePlus.Game.Services.GPose; using CustomizePlus.Game.Services.GPose.ExternalTools; using CustomizePlus.GameData.Services; using CustomizePlus.Configuration.Services.Temporary; using OtterGui.Services; using Penumbra.GameData.Actors; using Penumbra.GameData.Enums; using Penumbra.GameData.Structs; using OtterGui; using OtterGui.Raii; using CustomizePlus.Api; namespace CustomizePlus.Core; public static class ServiceManagerBuilder { public static ServiceManager CreateProvider(DalamudPluginInterface pi, Logger logger) { EventWrapperBase.ChangeLogger(logger); var services = new ServiceManager(logger) .AddExistingService(logger) .AddCore() .AddEvents() .AddGPoseServices() .AddArmatureServices() .AddUI() .AddGameDataServices() .AddTemplateServices() .AddProfileServices() .AddGameServices() .AddConfigServices() .AddDataLoaders() .AddApi(); DalamudServices.AddServices(services, pi); services.AddIServices(typeof(EquipItem).Assembly); services.AddIServices(typeof(Plugin).Assembly); services.AddIServices(typeof(ObjectManager).Assembly); services.AddIServices(typeof(ImRaii).Assembly); services.CreateProvider(); return services; } private static ServiceManager AddGPoseServices(this ServiceManager services) { services .AddSingleton() .AddSingleton() .AddSingleton(); return services; } private static ServiceManager AddArmatureServices(this ServiceManager services) { services .AddSingleton(); return services; } private static ServiceManager AddUI(this ServiceManager services) { services .AddSingleton() .AddSingleton() .AddSingleton() // template .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() // /template // profile .AddSingleton() .AddSingleton() .AddSingleton() // /profile // messages .AddSingleton() .AddSingleton() // /messages // .AddSingleton() .AddSingleton() // .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(); return services; } private static ServiceManager AddEvents(this ServiceManager services) { services .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(); return services; } private static ServiceManager AddCore(this ServiceManager services) { services .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(); return services; } private static ServiceManager AddDataLoaders(this ServiceManager services) { services .AddSingleton(); return services; } private static ServiceManager AddApi(this ServiceManager services) { services .AddSingleton() .AddSingleton(); return services; } private static ServiceManager AddConfigServices(this ServiceManager services) { services .AddSingleton() .AddSingleton() .AddSingleton(); return services; } private static ServiceManager AddGameServices(this ServiceManager services) { services .AddSingleton() .AddSingleton(); return services; } private static ServiceManager AddProfileServices(this ServiceManager services) { services .AddSingleton() .AddSingleton() .AddSingleton(); return services; } private static ServiceManager AddTemplateServices(this ServiceManager services) { services .AddSingleton() .AddSingleton() .AddSingleton(); return services; } private static ServiceManager AddGameDataServices(this ServiceManager services) { services .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(p => new CutsceneResolver(idx => (short)p.GetRequiredService().GetParentIndex(idx))) .AddSingleton(); return services; } }