using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Slim;
using System.Configuration;
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 IServiceProducer RegisterOptionsManager(this IServiceProducer serviceProducer)
{
serviceProducer.ThrowIfNull(nameof(serviceProducer));
serviceProducer.RegisterSingleton();
serviceProducer.RegisterOptionsResolver();
return serviceProducer;
}
///
/// Registers a .
/// This call also registers the resolver that resolves and .
///
/// Implementation of .
/// .
/// Provided .
public static IServiceProducer RegisterOptionsManager(this IServiceProducer serviceProducer)
where T : IOptionsManager
{
serviceProducer.ThrowIfNull(nameof(serviceProducer));
serviceProducer.RegisterSingleton();
serviceProducer.RegisterOptionsResolver();
return serviceProducer;
}
///
/// Registers resolvers for and .
/// Depends on a in order to properly resolve options.
///
/// .
/// .
public static IServiceProducer RegisterOptionsResolver(this IServiceProducer serviceProducer)
{
serviceProducer.ThrowIfNull(nameof(serviceProducer));
serviceProducer.RegisterResolver(new OptionsResolver());
serviceProducer.RegisterResolver(new UpdateableOptionsResolver());
serviceProducer.RegisterResolver(new LiveOptionsResolver());
serviceProducer.RegisterResolver(new LiveUpdateableOptionsResolver());
return serviceProducer;
}
///
/// 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 IServiceProducer RegisterCVLoggerFactory(this IServiceProducer serviceProducer)
{
serviceProducer.ThrowIfNull(nameof(serviceProducer));
serviceProducer.RegisterScoped(sp =>
{
LoggerFactory loggerFactory = new();
loggerFactory.AddProvider(new CVLoggerProvider(sp.GetService()));
return loggerFactory;
});
return serviceProducer;
}
///
/// Registers a .
///
/// .
/// Factory that produces a .
///
public static IServiceProducer RegisterLoggerFactory(this IServiceProducer serviceProducer, Func loggerFactory)
{
serviceProducer.ThrowIfNull(nameof(serviceProducer));
serviceProducer.RegisterSingleton(loggerFactory);
return serviceProducer;
}
///
/// Registers a with a that writes to .
///
/// .
///
public static IServiceProducer RegisterDebugLoggerFactory(this IServiceProducer serviceProducer)
{
serviceProducer.ThrowIfNull(nameof(serviceProducer));
serviceProducer.RegisterLogWriter();
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 IServiceProducer serviceProducer)
{
serviceProducer.ThrowIfNull(nameof(serviceProducer));
return new HttpClientBuilder(serviceProducer);
}
[Obsolete($"{nameof(RegisterHttpFactory)} is obsolete. Please use {nameof(RegisterHttpClient)} for each service that requires an instance of {nameof(IHttpClient