using CommandDotNet.NameCasing; using CommandDotNet; using Microsoft.Extensions.DependencyInjection; using CommandDotNet.IoC.MicrosoftDependencyInjection; using EnvelopeGenerator.Infrastructure; using EnvelopeGenerator.Application.Extensions; using Microsoft.Extensions.Configuration; using Microsoft.EntityFrameworkCore; using EnvelopeGenerator.Application.Contracts.Services; using EnvelopeGenerator.Application.Services; using Microsoft.Extensions.Hosting; namespace EnvelopeGenerator.Terminal; public static class DependencyInjection { public static IServiceCollection AddCommandManagerRunner(this IServiceCollection services, IConfiguration configuration, Case @case = Case.KebabCase, string connectionStringKeyName = "Default") { var connStr = configuration.GetConnectionString(connectionStringKeyName) ?? throw new InvalidOperationException("There is no default connection string in appsettings.json."); services.AddDistributedSqlServerCache(options => { options.ConnectionString = connStr; options.SchemaName = "dbo"; options.TableName = "TBDD_CACHE"; }); // Add envelope generator services services.AddEnvelopeGeneratorRepositories(options => options.UseSqlServer(connStr)); return services .AddSingleton() .AddEnvelopeGeneratorRepositories() .AddEnvelopeGeneratorServices(configuration) .AddSingleton(sp => { var runner = new AppRunner(); runner.UseMicrosoftDependencyInjection(sp); runner.UseNameCasing(@case); return runner; }) .AddScoped() .AddMemoryCache(); ; } public static Task RunCommandManagerRunner(this IServiceProvider provider, string[] args) { var runner = provider.GetRequiredService>(); return runner.RunAsync(args); } public static Task RunCommandManagerRunner(this IHost host, string[] args) => host.Services.RunCommandManagerRunner(args); }