using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace ZB.MOM.WW.LmxProxy.Client;
///
/// Extension methods for registering LmxProxy client services in the DI container.
///
public static class ServiceCollectionExtensions
{
/// Registers a singleton ILmxProxyClient from the "LmxProxy" config section.
public static IServiceCollection AddLmxProxyClient(
this IServiceCollection services, IConfiguration configuration)
{
return services.AddLmxProxyClient(configuration, "LmxProxy");
}
/// Registers a singleton ILmxProxyClient from a named config section.
public static IServiceCollection AddLmxProxyClient(
this IServiceCollection services, IConfiguration configuration, string sectionName)
{
services.AddSingleton(
sp => new LmxProxyClientFactory(configuration));
services.AddSingleton(sp =>
{
var factory = sp.GetRequiredService();
return factory.CreateClient(sectionName);
});
return services;
}
/// Registers a singleton ILmxProxyClient via builder action.
public static IServiceCollection AddLmxProxyClient(
this IServiceCollection services, Action configure)
{
services.AddSingleton(sp =>
{
var builder = new LmxProxyClientBuilder();
configure(builder);
return builder.Build();
});
return services;
}
/// Registers a scoped ILmxProxyClient from the "LmxProxy" config section.
public static IServiceCollection AddScopedLmxProxyClient(
this IServiceCollection services, IConfiguration configuration)
{
services.AddSingleton(
sp => new LmxProxyClientFactory(configuration));
services.AddScoped(sp =>
{
var factory = sp.GetRequiredService();
return factory.CreateClient();
});
return services;
}
/// Registers a keyed singleton ILmxProxyClient.
public static IServiceCollection AddNamedLmxProxyClient(
this IServiceCollection services, string name, Action configure)
{
services.AddKeyedSingleton(name, (sp, key) =>
{
var builder = new LmxProxyClientBuilder();
configure(builder);
return builder.Build();
});
return services;
}
}