using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using StellaOps.Router.Common.Abstractions; namespace StellaOps.Router.Transport.InMemory; /// /// Extension methods for registering InMemory transport services. /// public static class ServiceCollectionExtensions { /// /// Adds the InMemory transport for testing and development. /// /// The service collection. /// Optional configuration action. /// The service collection for chaining. public static IServiceCollection AddInMemoryTransport( this IServiceCollection services, Action? configure = null) { services.AddOptions(); if (configure is not null) { services.Configure(configure); } // Singleton registry shared between server and client services.TryAddSingleton(); // Transport implementations services.TryAddSingleton(); services.TryAddSingleton(); // Register interfaces services.TryAddSingleton(sp => sp.GetRequiredService()); services.TryAddSingleton(sp => sp.GetRequiredService()); services.TryAddSingleton(sp => sp.GetRequiredService()); return services; } /// /// Adds the InMemory transport server only (for Gateway). /// /// The service collection. /// Optional configuration action. /// The service collection for chaining. public static IServiceCollection AddInMemoryTransportServer( this IServiceCollection services, Action? configure = null) { services.AddOptions(); if (configure is not null) { services.Configure(configure); } services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(sp => sp.GetRequiredService()); return services; } /// /// Adds the InMemory transport client only (for Microservice SDK). /// /// The service collection. /// Optional configuration action. /// The service collection for chaining. public static IServiceCollection AddInMemoryTransportClient( this IServiceCollection services, Action? configure = null) { services.AddOptions(); if (configure is not null) { services.Configure(configure); } services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(sp => sp.GetRequiredService()); services.TryAddSingleton(sp => sp.GetRequiredService()); return services; } }