using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Slim; using System.Net.Http; using System.Net.WebSockets; namespace System.Extensions; public static class ServiceManagerExtensions { /// /// Registers a . /// /// . /// Factory that produces a . /// public static IServiceProducer RegisterLoggerFactory(this IServiceProducer serviceProducer, Func loggerFactory) { serviceProducer.ThrowIfNull(nameof(serviceProducer)); serviceProducer.RegisterSingleton(loggerFactory); return serviceProducer; } /// /// Register a scoped to be used by the DI engine. /// /// Type of the scoped . /// . /// to build the http client. public static HttpClientBuilder RegisterHttpClient(this IServiceCollection services) { services.ThrowIfNull(nameof(services)); return new HttpClientBuilder(services); } /// /// Register a scoped to be used by the DI engine. /// /// Type of the scoped . /// . /// to build the websocket client. public static ClientWebSocketBuilder RegisterClientWebSocket(this IServiceCollection services) { services.ThrowIfNull(nameof(services)); return new ClientWebSocketBuilder(services); } [Obsolete($"{nameof(RegisterHttpFactory)} is obsolete. Please use {nameof(RegisterHttpClient)} for each service that requires an instance of {nameof(IHttpClient)}.")] public static IServiceProducer RegisterHttpFactory(this IServiceProducer serviceProducer) { serviceProducer.ThrowIfNull(nameof(serviceProducer)); serviceProducer.RegisterResolver(new HttpClientResolver()); return serviceProducer; } [Obsolete($"{nameof(RegisterHttpFactory)} is obsolete. Please use {nameof(RegisterHttpClient)} for each service that requires an instance of {nameof(IHttpClient)}.")] public static IServiceProducer RegisterHttpFactory(this IServiceProducer serviceProducer, Func handlerFactory) { serviceProducer.ThrowIfNull(nameof(serviceProducer)); serviceProducer.RegisterResolver( new HttpClientResolver() .WithHttpMessageHandlerFactory(handlerFactory)); return serviceProducer; } }