using LCU.API.Internal.DocumentLib.Configurations; using LCU.API.Internal.DocumentLib.Utilities; using LCU.Library.Internal.Configuration; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using OwnerNumberMigration; using OwnerNumberMigration.Logging; using OwnerNumberMigration.Migrations; using ILogger = Microsoft.Extensions.Logging.ILogger; using Azure.Identity; using LCU.API.Internal.DocumentLib.Containers; using Microsoft.Extensions.Logging; using OwnerNumberMigration.ValueParsing; using Serilog; using LCU.Library.Internal.Logging.Models; using LCU.Library.Internal.Logging; await Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((host, configuration) => { var vaultConfiguration = configuration.Build(); var clientSecretCredentials = new ClientSecretCredential ( vaultConfiguration["TenantId"], vaultConfiguration["ClientId"], vaultConfiguration["ClientSecret"] ); var vaultLocation = new Uri($"https://{vaultConfiguration["AzureKeyVaultUrl"]}.vault.azure.net/"); configuration.AddAzureKeyVault(vaultLocation, clientSecretCredentials); }) /* remove for local */ .UseSerilog() /* to here */ /* local: .ConfigureLogging(logging => { logging .AddConsole() .AddFile("Logs/OwnerMigration-{Date}.log", isJson: true) .SetMinimumLevel(LogLevel.Information); }) */ .ConfigureServices((host, services) => { services.RegisterOwnerMigrationServices(); host.Configuration.Bind(services, "MongoDatabase"); host.Configuration.Bind(services, "NotificationApiConfiguration"); /* remove for local */ var loggingConfiguration = host.Configuration.GetSection("Primary"); var loggerConfiguration = new LoggingConfiguration ( loggingConfiguration["AppName"], loggingConfiguration["SeqUrl"], loggingConfiguration["SeqApiKey"] ); var lcuLogging = new LcuLogging(loggerConfiguration); lcuLogging.UseLcuLogging(); /* to here */ }) .RunConsoleAsync(); public static class ServiceRegistrationExtension { public static IServiceCollection RegisterOwnerMigrationServices(this IServiceCollection services) { ServiceRegistrations.AddDocumentRepositories(services); services.AddTransient(p => p.GetRequiredService>()); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(p => (migration, name, destination) => new AttributeMigrationLoggingDecorator ( migration, p.GetRequiredService(), p.GetRequiredService(), name, destination, p.GetRequiredService() ) ); services.AddTransient(p => name => new AttributeMigrationLoggingObserver ( p.GetRequiredService(), name ) ); services.AddTransient>(p => (name, strategy, property) => p.GetRequiredService() ( new AttributeMigration ( p.GetRequiredService(), name, strategy, property, p.GetRequiredService()(name), p.GetRequiredService() ), name, property ) ); services.AddTransient>(p => (name, strategy, property) => p.GetRequiredService() ( new AttributeMigration ( p.GetRequiredService(), name, strategy, property, p.GetRequiredService()(name), p.GetRequiredService() ), name, property ) ); services.AddSingleton(); services.AddHostedService(); services.AddHostedService(); services.AddHostedService(); services.AddHostedService(); services.AddHostedService(); return services; } }