using DigitalData.Auth.Abstractions; using Microsoft.AspNetCore.SignalR.Client; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; namespace DigitalData.Auth.Client; public static class DIExtensions { public static IServiceCollection AddAuthHubClient(this IServiceCollection services, IConfiguration? configuration = null, Action? options = null) { var clientParams = configuration?.Get() ?? new ClientParams(); options?.Invoke(clientParams); services .AddSingleton(Options.Create(clientParams)) .AddSingleton() .TryAddSingleton(); services.AddHostedService(sp => { var client = sp.GetRequiredService() as AuthClient; if (client is not null) return client; else throw new InvalidOperationException( "IAuthClient instance could not be resolved from the service provider. " + "This may indicate that the 'AddAuthHubClient' extension method was not called " + "or there was an issue with the dependency registration process." ); }); return services; } }