| | | 1 | | using Microsoft.Extensions.DependencyInjection; |
| | | 2 | | |
| | | 3 | | namespace TeleFlow.Framework.Middleware; |
| | | 4 | | |
| | | 5 | | public static class ServiceCollectionMiddlewareExtensions |
| | | 6 | | { |
| | | 7 | | public static IServiceCollection AddUpdateMiddleware<TMiddleware>(this IServiceCollection services) |
| | | 8 | | where TMiddleware : class, IUpdateMiddleware |
| | | 9 | | { |
| | 63 | 10 | | ArgumentNullException.ThrowIfNull(services); |
| | | 11 | | |
| | 63 | 12 | | services.AddScoped<TMiddleware>(); |
| | 63 | 13 | | services.AddUpdateMiddlewareRegistration<TMiddleware>(); |
| | 63 | 14 | | return services; |
| | | 15 | | } |
| | | 16 | | |
| | | 17 | | public static IServiceCollection AddSingletonUpdateMiddleware<TMiddleware>(this IServiceCollection services) |
| | | 18 | | where TMiddleware : class, IUpdateMiddleware |
| | | 19 | | { |
| | 1 | 20 | | ArgumentNullException.ThrowIfNull(services); |
| | | 21 | | |
| | 1 | 22 | | services.AddSingleton<TMiddleware>(); |
| | 1 | 23 | | services.AddUpdateMiddlewareRegistration<TMiddleware>(); |
| | 1 | 24 | | return services; |
| | | 25 | | } |
| | | 26 | | |
| | | 27 | | public static IServiceCollection AddDefaultUpdateRateLimiting(this IServiceCollection services) |
| | | 28 | | { |
| | 1 | 29 | | ArgumentNullException.ThrowIfNull(services); |
| | | 30 | | |
| | 1 | 31 | | services.AddUpdateMiddleware<UpdateRateLimitMiddleware>(); |
| | 1 | 32 | | return services; |
| | | 33 | | } |
| | | 34 | | |
| | | 35 | | private static void AddUpdateMiddlewareRegistration<TMiddleware>(this IServiceCollection services) |
| | | 36 | | where TMiddleware : class, IUpdateMiddleware |
| | | 37 | | { |
| | 64 | 38 | | var middlewareType = typeof(TMiddleware); |
| | | 39 | | |
| | 64 | 40 | | if (services.Any(descriptor => |
| | 1565 | 41 | | descriptor.ServiceType == typeof(UpdateMiddlewareRegistration) && |
| | 1565 | 42 | | descriptor.ImplementationInstance is UpdateMiddlewareRegistration registration && |
| | 1565 | 43 | | registration.MiddlewareType == middlewareType)) |
| | | 44 | | { |
| | 0 | 45 | | return; |
| | | 46 | | } |
| | | 47 | | |
| | 64 | 48 | | services.AddSingleton(new UpdateMiddlewareRegistration(middlewareType)); |
| | 64 | 49 | | } |
| | | 50 | | } |