using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Slim; using System.Configuration; using System.Http; using System.Logging; using System.Net.Http; namespace System.Extensions { public static class ServiceManagerExtensions { /// /// Registers a with the default . /// This call also registers the resolver that resolves and . /// /// . /// Provided . public static IServiceManager RegisterOptionsManager(this IServiceManager serviceManager) { serviceManager.RegisterSingleton(); serviceManager.RegisterOptionsResolver(); return serviceManager; } /// /// Registers a . /// This call also registers the resolver that resolves and . /// /// Implementation of . /// . /// Provided . public static IServiceManager RegisterOptionsManager(this IServiceManager serviceManager) where T : IOptionsManager { serviceManager.RegisterSingleton(); serviceManager.RegisterOptionsResolver(); return serviceManager; } /// /// Registers resolvers for and . /// Depends on a in order to properly resolve options. /// /// . /// . public static IServiceManager RegisterOptionsResolver(this IServiceManager serviceManager) { serviceManager.ThrowIfNull(nameof(serviceManager)); serviceManager.RegisterResolver(new OptionsResolver()); serviceManager.RegisterResolver(new UpdateableOptionsResolver()); serviceManager.RegisterResolver(new LiveOptionsResolver()); serviceManager.RegisterResolver(new LiveUpdateableOptionsResolver()); return serviceManager; } /// /// Registers a with the default . /// /// Implementation of . /// . /// Provided . public static IServiceProducer RegisterLogWriter(this IServiceProducer serviceManager) where TLogsWriter : ILogsWriter { serviceManager.ThrowIfNull(nameof(serviceManager)); serviceManager.RegisterSingleton(); serviceManager.RegisterScoped(sp => { var factory = new LoggerFactory(); factory.AddProvider(new CVLoggerProvider(sp.GetService())); return factory; }); return serviceManager; } /// /// Registers a with the default . /// /// Interface of . /// Implementation of . /// . /// Provided . public static IServiceProducer RegisterLogWriter(this IServiceProducer serviceManager) where TLogsWriter : TILogsWriter where TILogsWriter : class, ILogsWriter { serviceManager.ThrowIfNull(nameof(serviceManager)); serviceManager.RegisterSingleton(); serviceManager.RegisterScoped(sp => { var factory = new LoggerFactory(); factory.AddProvider(new CVLoggerProvider(sp.GetService())); return factory; }); return serviceManager; } /// /// Register a with a . /// /// /// public static IServiceManager RegisterCVLoggerFactory(this IServiceManager serviceManager) { serviceManager.RegisterScoped(sp => { LoggerFactory loggerFactory = new(); loggerFactory.AddProvider(new CVLoggerProvider(sp.GetService())); return loggerFactory; }); return serviceManager; } public static IServiceManager RegisterLoggerFactory(this IServiceManager serviceManager, Func loggerFactory) { serviceManager.ThrowIfNull(nameof(serviceManager)); serviceManager.RegisterSingleton(loggerFactory); return serviceManager; } public static IServiceManager RegisterDebugLoggerFactory(this IServiceManager serviceManager) { serviceManager.ThrowIfNull(nameof(serviceManager)); serviceManager.RegisterLogWriter(); return serviceManager; } public static IServiceManager RegisterHttpFactory(this IServiceManager serviceManager) { serviceManager.ThrowIfNull(nameof(serviceManager)); serviceManager.RegisterResolver(new HttpClientResolver()); return serviceManager; } public static IServiceManager RegisterHttpFactory(this IServiceManager serviceManager, Func handlerFactory) { serviceManager.ThrowIfNull(nameof(serviceManager)); serviceManager.RegisterResolver( new HttpClientResolver() .WithHttpMessageHandlerFactory(handlerFactory)); return serviceManager; } } }