Restructures application startup and configuration
Migrates from standalone Program.cs to Startup-based configuration Adds application configuration JSON for environment-specific settings Integrates Autofac dependency injection and modular service registration Configures application services, modules, and middleware for enhanced flexibility
This commit is contained in:
parent
7fc1ae0650
commit
cd092f8290
4 changed files with 129 additions and 45 deletions
93
PlanTempus.Application/Startup.cs
Normal file
93
PlanTempus.Application/Startup.cs
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
using Autofac;
|
||||
using PlanTempus.Application.Features.Localization.Services;
|
||||
using PlanTempus.Application.Features.Menu.Services;
|
||||
using PlanTempus.Components.ModuleRegistry;
|
||||
using PlanTempus.Components.Outbox;
|
||||
using PlanTempus.Core.Configurations.JsonConfigProvider;
|
||||
using PlanTempus.Core.Configurations;
|
||||
using PlanTempus.Core.Email;
|
||||
using PlanTempus.Core.ModuleRegistry;
|
||||
using PlanTempus.Core.Outbox;
|
||||
|
||||
namespace PlanTempus.Application;
|
||||
|
||||
public class Startup
|
||||
{
|
||||
public Startup(IWebHostEnvironment env)
|
||||
{
|
||||
var builder = new Core.Configurations.ConfigurationBuilder()
|
||||
.AddJsonFile("appconfiguration.json", optional: true, reloadOnChange: true);
|
||||
|
||||
ConfigurationRoot = builder.Build();
|
||||
}
|
||||
|
||||
public Core.Configurations.IConfigurationRoot ConfigurationRoot { get; private set; }
|
||||
|
||||
public ILifetimeScope? AutofacContainer { get; private set; }
|
||||
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services.AddControllers();
|
||||
services.AddOptions();
|
||||
|
||||
// Add Razor Pages with feature-based structure
|
||||
services.AddRazorPages(options =>
|
||||
{
|
||||
options.RootDirectory = "/Features";
|
||||
})
|
||||
.AddRazorOptions(options =>
|
||||
{
|
||||
options.ViewLocationFormats.Add("/Features/_Shared/Pages/{0}.cshtml");
|
||||
options.ViewLocationFormats.Add("/Features/_Shared/Components/{1}/{0}.cshtml");
|
||||
});
|
||||
|
||||
services.AddAntiforgery(x => x.HeaderName = "X-ANTI-FORGERY-TOKEN");
|
||||
}
|
||||
|
||||
public void ConfigureContainer(ContainerBuilder builder)
|
||||
{
|
||||
// Application services
|
||||
builder.RegisterType<MockMenuService>().As<IMenuService>().InstancePerLifetimeScope();
|
||||
builder.RegisterType<JsonLocalizationService>().As<ILocalizationService>().InstancePerLifetimeScope();
|
||||
|
||||
// Infrastructure modules
|
||||
builder.RegisterModule(new Database.ModuleRegistry.DbPostgreSqlModule
|
||||
{
|
||||
ConnectionString = ConfigurationRoot.GetConnectionString("DefaultConnection")
|
||||
});
|
||||
|
||||
builder.RegisterModule(new TelemetryModule
|
||||
{
|
||||
TelemetryConfig = ConfigurationRoot.GetSection("ApplicationInsights").ToObject<TelemetryConfig>()
|
||||
});
|
||||
|
||||
builder.RegisterModule<CommandModule>();
|
||||
builder.RegisterModule<OutboxModule>();
|
||||
builder.RegisterModule<OutboxListenerModule>();
|
||||
builder.RegisterModule(new EmailModule
|
||||
{
|
||||
PostmarkConfiguration = ConfigurationRoot.GetSection("Postmark").ToObject<PostmarkConfiguration>()
|
||||
});
|
||||
}
|
||||
|
||||
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
|
||||
{
|
||||
if (env.IsDevelopment())
|
||||
app.UseDeveloperExceptionPage();
|
||||
else
|
||||
{
|
||||
app.UseExceptionHandler("/Error");
|
||||
app.UseHsts();
|
||||
}
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
app.UseRouting();
|
||||
app.UseStaticFiles();
|
||||
|
||||
app.UseEndpoints(endpoints =>
|
||||
{
|
||||
endpoints.MapRazorPages();
|
||||
endpoints.MapControllers();
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue