using RobotNet10.FleetManager.Events; using RobotNet10.RobotApp.Events; using RobotNet10.RobotApp.Interfaces; using RobotNet10.RobotApp.Services.ConfigManager; using RobotNet10.RobotApp.Services.Navigation; using RobotNet10.RobotApp.Services.Navigation.CSharp; using RobotNet10.RobotApp.Services.Robot.Actions; using RobotNet10.RobotApp.Services.Robot.Connection; using RobotNet10.RobotApp.Services.Robot.Modules; using RobotNet10.RobotApp.Services.State; using System.Diagnostics.CodeAnalysis; namespace RobotNet10.RobotApp.Services.Robot; public static class RobotExtensions { public static IServiceCollection AddRobot(this IServiceCollection services) { services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddInterfaceServiceSingleton(); services.AddHostedInterfaceServiceSingleton(); services.AddHostedInterfaceServiceSingleton(); services.AddHostedInterfaceServiceSingleton(); return services; } public static IServiceCollection AddInterfaceServiceSingleton(this IServiceCollection services) where TService : class where TImplementation : class, TService { services.AddSingleton(); services.AddSingleton(sp => sp.GetRequiredService()); return services; } public static IServiceCollection AddInterfacesServiceSingleton(this IServiceCollection services) where TService1 : class where TService2 : class where TImplementation : class, TService1, TService2 { services.AddSingleton(); services.AddSingleton(sp => sp.GetRequiredService()); services.AddSingleton(sp => sp.GetRequiredService()); return services; } public static IServiceCollection AddHostedServiceSingleton<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] THostedService>(this IServiceCollection services) where THostedService : class, IHostedService { services.AddSingleton(); services.AddHostedService(sp => sp.GetRequiredService()); return services; } public static IServiceCollection AddHostedInterfaceServiceSingleton(this IServiceCollection services) where TService : class where THostedService : class, IHostedService, TService { services.AddSingleton(); services.AddSingleton(sp => sp.GetRequiredService()); services.AddHostedService(sp => sp.GetRequiredService()); return services; } public static IServiceCollection AddHostedInterfaceServiceSingleton(this IServiceCollection services) where TService1 : class where TService2 : class where THostedService : class, IHostedService, TService1, TService2 { services.AddSingleton(); services.AddSingleton(sp => sp.GetRequiredService()); services.AddSingleton(sp => sp.GetRequiredService()); services.AddHostedService(sp => sp.GetRequiredService()); return services; } }