From bcf4e63f7c510cc71209e68583680c1ec52d7058 Mon Sep 17 00:00:00 2001 From: TekH Date: Thu, 9 Apr 2026 13:36:40 +0200 Subject: [PATCH] Add distributed cache, localization, and infra services - Add DigitalData.Core.API and SQL Server distributed cache dependencies - Register EnvelopeGenerator.Application project reference - Configure distributed SQL Server cache and memory cache - Register infrastructure, application, and user management services - Set up EF Core with SQL Server and detailed logging - Enable localization with configurable supported cultures - Improve modularity and extensibility of service registration --- .../EnvelopeGenerator.ServiceHost.csproj | 3 + EnvelopeGenerator.ServiceHost/Program.cs | 56 +++++++++++++++++-- 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/EnvelopeGenerator.ServiceHost/EnvelopeGenerator.ServiceHost.csproj b/EnvelopeGenerator.ServiceHost/EnvelopeGenerator.ServiceHost.csproj index dd58d616..1c6ecd7c 100644 --- a/EnvelopeGenerator.ServiceHost/EnvelopeGenerator.ServiceHost.csproj +++ b/EnvelopeGenerator.ServiceHost/EnvelopeGenerator.ServiceHost.csproj @@ -8,6 +8,7 @@ + @@ -19,9 +20,11 @@ + + diff --git a/EnvelopeGenerator.ServiceHost/Program.cs b/EnvelopeGenerator.ServiceHost/Program.cs index 8941a80f..753fc5f9 100644 --- a/EnvelopeGenerator.ServiceHost/Program.cs +++ b/EnvelopeGenerator.ServiceHost/Program.cs @@ -1,15 +1,51 @@ +using DigitalData.UserManager.DependencyInjection; +using EnvelopeGenerator.Application; +using EnvelopeGenerator.Infrastructure; using EnvelopeGenerator.ServiceHost; using EnvelopeGenerator.ServiceHost.Extensions; +using Microsoft.AspNetCore.Localization; +using Microsoft.EntityFrameworkCore; +using System.Globalization; var builder = WebApplication.CreateBuilder(args); // Add services to the container. -builder.Services.AddControllers(); -builder.Services.AddFinalizeDocumentJob(builder.Configuration); -builder.Services.AddHostedService(); +var config = builder.Configuration; +var connStr = config.GetConnectionString("Default") ?? + throw new InvalidOperationException("Connection string 'Default' is missing in the configuration."); + +#region Service configuration +builder.Services.AddControllers(); +builder.Services.AddHostedService(); +builder.Services.AddDistributedSqlServerCache(options => +{ + options.ConnectionString = connStr; + options.SchemaName = "dbo"; + options.TableName = "TBDD_CACHE"; +}); +#pragma warning disable CS0618 +builder.Services.AddFinalizeDocumentJob(config); +builder.Services.AddEnvelopeGeneratorInfrastructureServices( + opt => + { + opt.AddDbTriggerParams(config); + opt.AddDbContext((provider, options) => + { + var logger = provider.GetRequiredService>(); + options.UseSqlServer(connStr) + .LogTo(log => logger.LogInformation("{log}", log), Microsoft.Extensions.Logging.LogLevel.Trace) + .EnableSensitiveDataLogging() + .EnableDetailedErrors(); + }); + }); +builder.Services.AddEnvelopeGeneratorServices(config); +builder.Services.AddMemoryCache(); +builder.Services.AddUserManager(); +#pragma warning restore CS0618 +builder.Services.AddLocalization(); +#endregion -// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); @@ -22,6 +58,18 @@ if (app.Environment.IsDevelopment()) app.UseSwaggerUI(); } +#region Localizer +var supportedCultureNames = config.GetSection("SupportedCultures").Get() ?? ["de-DE", "en-US"]; +var supportedCultures = supportedCultureNames.Select(cName => new CultureInfo(cName)).ToList(); +var requestLocalizationOptions = new RequestLocalizationOptions +{ + SupportedCultures = supportedCultures, + SupportedUICultures = supportedCultures +}; +requestLocalizationOptions.RequestCultureProviders.Add(new QueryStringRequestCultureProvider()); +app.UseRequestLocalization(requestLocalizationOptions); +#endregion + app.UseHttpsRedirection(); app.UseAuthorization();