using Microsoft.EntityFrameworkCore; using Prefab.Catalog.Data; using Prefab.Data; using Prefab.Module; using Prefab.Web.Client.Services; using Prefab.Web.Data; using Prefab.Web.Gateway; using Prefab.Web.Shared; using Prefab.Web.Workers; namespace Prefab.Web; public class Module : IModule { public WebApplicationBuilder Build(WebApplicationBuilder builder) { var writeConnection = builder.Configuration.GetConnectionString("PrefabDb") ?? throw new InvalidOperationException("Connection string 'PrefabDb' not found. Ensure the Aspire AppHost exposes the SQL resource."); var readConnection = builder.Configuration.GetConnectionString("PrefabDbReadOnly") ?? writeConnection; builder.Services.AddSingleton(); builder.Services.AddDbContext(options => options.UseSqlServer(writeConnection, sqlOptions => sqlOptions.EnableRetryOnFailure())); builder.Services.AddDbContext(options => options.UseSqlServer(readConnection, sqlOptions => sqlOptions.EnableRetryOnFailure())); builder.Services.AddDbContextFactory(options => options.UseSqlServer(writeConnection, sqlOptions => sqlOptions.EnableRetryOnFailure()), ServiceLifetime.Scoped); builder.Services.AddDbContextFactory(options => options.UseSqlServer(readConnection, sqlOptions => sqlOptions.EnableRetryOnFailure()), ServiceLifetime.Scoped); builder.Services.AddModuleDbInterfaces(typeof(AppDb)); builder.Services.AddModuleDbInterfaces(typeof(AppDbReadOnly)); builder.Services.AddScoped(); //builder.Services.AddHostedService(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(sp => sp.GetRequiredService()); builder.Services.AddScoped(sp => sp.GetRequiredService()); return builder; } public WebApplication Configure(WebApplication app) { app.UseExceptionHandling(); return app; } }