using Microsoft.Extensions.DependencyInjection; using System; namespace DigitalData.Core.Legacy.Client { public static class ServiceFactory { private static readonly IServiceCollection _services = new ServiceCollection(); private static readonly Lazy _lazyProvider = new Lazy(Build); public static IServiceCollection Services => !_lazyProvider.IsValueCreated ? _services : throw new InvalidOperationException( "Service provider has already been created. " + "Further modifications to the service collection are not allowed. " + "This is to ensure that the dependency injection container remains in a consistent state."); private static IServiceProvider Build() => _services.BuildServiceProvider(); public static T Provide() => _lazyProvider.Value.GetRequiredService(); public static HttpClientService ProvideHttpClientService() where TOptions : HttpClientOptions => _lazyProvider.Value.GetRequiredService>(); } }