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