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;
}
}