64 lines
3.4 KiB
C#
64 lines
3.4 KiB
C#
using RobotApp.Interfaces;
|
|
using RobotApp.Services.Robot;
|
|
using RobotApp.Services.State;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
|
|
namespace RobotApp.Services;
|
|
|
|
public static class RobotExtensions
|
|
{
|
|
public static IServiceCollection AddRobot(this IServiceCollection services)
|
|
{
|
|
services.AddSingleton<RobotStateMachine>();
|
|
services.AddSingleton<RobotConfiguration>();
|
|
services.AddSingleton<RobotPathPlanner>();
|
|
services.AddSingleton<RobotConnection>();
|
|
|
|
services.AddInterfaceServiceSingleton<IBattery, RobotBattery>();
|
|
services.AddInterfaceServiceSingleton<IDriver, RobotDriver>();
|
|
services.AddInterfaceServiceSingleton<IError, RobotErrors>();
|
|
services.AddInterfaceServiceSingleton<IInfomation, RobotInfomations>();
|
|
services.AddInterfaceServiceSingleton<IInstantActions, RobotActionController>();
|
|
services.AddInterfaceServiceSingleton<INavigation, RobotNavigation>();
|
|
services.AddInterfaceServiceSingleton<IOrder, RobotOrderController>();
|
|
|
|
services.AddHostedInterfaceServiceSingleton<IPeripheral, ISafety, RobotPeripheral>();
|
|
services.AddHostedInterfaceServiceSingleton<ILocalization, RobotLocalization>();
|
|
|
|
services.AddHostedServiceSingleton<RobotController>();
|
|
services.AddHostedServiceSingleton<RobotVisualization>();
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddInterfaceServiceSingleton<TService, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TImplementation>(this IServiceCollection services) where TService : class where TImplementation : class, TService
|
|
{
|
|
services.AddSingleton<TImplementation>();
|
|
services.AddSingleton<TService>(sp => sp.GetRequiredService<TImplementation>());
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddHostedServiceSingleton<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] THostedService>(this IServiceCollection services) where THostedService : class, IHostedService
|
|
{
|
|
services.AddSingleton<THostedService>();
|
|
services.AddHostedService(sp => sp.GetRequiredService<THostedService>());
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddHostedInterfaceServiceSingleton<TService, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] THostedService>(this IServiceCollection services) where TService : class where THostedService : class, IHostedService, TService
|
|
{
|
|
services.AddSingleton<THostedService>();
|
|
services.AddSingleton<TService>(sp => sp.GetRequiredService<THostedService>());
|
|
services.AddHostedService(sp => sp.GetRequiredService<THostedService>());
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddHostedInterfaceServiceSingleton<TService1, TService2, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] THostedService>(this IServiceCollection services) where TService1 : class where TService2 : class where THostedService : class, IHostedService, TService1, TService2
|
|
{
|
|
services.AddSingleton<THostedService>();
|
|
services.AddSingleton<TService1>(sp => sp.GetRequiredService<THostedService>());
|
|
services.AddSingleton<TService2>(sp => sp.GetRequiredService<THostedService>());
|
|
services.AddHostedService(sp => sp.GetRequiredService<THostedService>());
|
|
return services;
|
|
}
|
|
}
|