71 lines
2.8 KiB
C#
71 lines
2.8 KiB
C#
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<IHttpContextAccessor, HttpContextAccessor>();
|
|
|
|
builder.Services.AddDbContext<IPrefabDb, AppDb>(options =>
|
|
options.UseSqlServer(writeConnection, sqlOptions => sqlOptions.EnableRetryOnFailure()));
|
|
|
|
builder.Services.AddDbContext<IPrefabDbReadOnly, AppDbReadOnly>(options =>
|
|
options.UseSqlServer(readConnection, sqlOptions => sqlOptions.EnableRetryOnFailure()));
|
|
|
|
builder.Services.AddDbContextFactory<AppDb>(options =>
|
|
options.UseSqlServer(writeConnection, sqlOptions => sqlOptions.EnableRetryOnFailure()), ServiceLifetime.Scoped);
|
|
|
|
builder.Services.AddDbContextFactory<AppDbReadOnly>(options =>
|
|
options.UseSqlServer(readConnection, sqlOptions => sqlOptions.EnableRetryOnFailure()), ServiceLifetime.Scoped);
|
|
|
|
builder.Services.AddModuleDbInterfaces(typeof(AppDb));
|
|
builder.Services.AddModuleDbInterfaces(typeof(AppDbReadOnly));
|
|
|
|
builder.Services.AddScoped<ICatalogDbContextFactory, CatalogDbContextFactory>();
|
|
|
|
//builder.Services.AddHostedService<DataSeeder>();
|
|
|
|
|
|
builder.Services.AddScoped<INotificationService, NotificationService>();
|
|
|
|
builder.Services.AddScoped<INavMenuService, Prefab.Web.Gateway.Shared.NavMenu.Service>();
|
|
|
|
builder.Services.AddScoped<ICategoriesPageService, Categories.PageService>();
|
|
builder.Services.AddScoped<Home.Service>();
|
|
builder.Services.AddScoped<Products.ListingService>();
|
|
builder.Services.AddScoped<Products.DetailService>();
|
|
builder.Services.AddScoped<IProductListingService>(sp => sp.GetRequiredService<Products.ListingService>());
|
|
builder.Services.AddScoped<IProductDisplayService>(sp => sp.GetRequiredService<Products.DetailService>());
|
|
builder.Services.AddScoped<IHomePageService>(sp => sp.GetRequiredService<Home.Service>());
|
|
|
|
return builder;
|
|
}
|
|
|
|
public WebApplication Configure(WebApplication app)
|
|
{
|
|
app.UseExceptionHandling();
|
|
|
|
return app;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|