using Amazon.JSII.JsonModel.FileSystem; using Amazon.JSII.Runtime.Services.Converters; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System; using System.Threading; namespace Amazon.JSII.Runtime.Services { public static class ServiceContainer { private static readonly Lazy _serviceProvider = new Lazy( () => BuildServiceProvider(), LazyThreadSafetyMode.ExecutionAndPublication ); public static IServiceProvider? ServiceProviderOverride { get; set; } internal static IServiceProvider ServiceProvider => ServiceProviderOverride ?? _serviceProvider.Value; public static ServiceProvider BuildServiceProvider(ILoggerFactory? loggerFactoryOverride = null) { IServiceCollection serviceCollection = new ServiceCollection(); if (loggerFactoryOverride == null) { serviceCollection.AddLogging(builder => builder.AddConsole()); } else { serviceCollection.AddSingleton(loggerFactoryOverride); } serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddTransient(); ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider(); IClient client = serviceProvider.GetRequiredService(); client.Hello(); return serviceProvider; } } }