DataSourceAdapter-Pattern + SiteExportService schlanker + Page-Services Scoped
- IDataSourceAdapter mit 3 Implementierungen (HANA, SAP_GATEWAY, MANUAL_EXCEL) und DataSourceAdapterResolver ersetzen das if/else auf ConnectionKind. - SiteExportService von 338 auf 187 Zeilen reduziert: Pipeline Resolve -> Fetch -> Transform -> Excel -> Central -> SharePoint. - Page-Services auf Scoped (per Blazor-Circuit); Orchestrator bleibt Singleton fuer geteilten Export-Status.
This commit is contained in:
@@ -2,6 +2,7 @@ using Microsoft.EntityFrameworkCore;
|
||||
using MudBlazor.Services;
|
||||
using TrafagSalesExporter.Data;
|
||||
using TrafagSalesExporter.Services;
|
||||
using TrafagSalesExporter.Services.DataSources;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
@@ -14,6 +15,7 @@ builder.Services.AddHttpClient(nameof(ExchangeRateImportService));
|
||||
builder.Services.AddDbContextFactory<AppDbContext>(options =>
|
||||
options.UseSqlite("Data Source=trafag_exporter.db;Default Timeout=60"));
|
||||
|
||||
// Stateless Infrastruktur- und Connector-Services: Singleton.
|
||||
builder.Services.AddSingleton<IHanaQueryService, HanaQueryService>();
|
||||
builder.Services.AddSingleton<IExcelExportService, ExcelExportService>();
|
||||
builder.Services.AddSingleton<ISharePointUploadService, SharePointUploadService>();
|
||||
@@ -36,7 +38,6 @@ builder.Services.AddSingleton<IRecordTransformationService, RecordTransformation
|
||||
builder.Services.AddSingleton<IAppEventLogService, AppEventLogService>();
|
||||
builder.Services.AddSingleton<IManagementCockpitService, ManagementCockpitService>();
|
||||
builder.Services.AddSingleton<IManualExcelImportService, ManualExcelImportService>();
|
||||
builder.Services.AddSingleton<ISiteExportService, SiteExportService>();
|
||||
builder.Services.AddSingleton<IConsolidatedExportService, ConsolidatedExportService>();
|
||||
builder.Services.AddSingleton<IExportLogService, ExportLogService>();
|
||||
builder.Services.AddSingleton<ICentralSalesRecordService, CentralSalesRecordService>();
|
||||
@@ -44,18 +45,29 @@ builder.Services.AddSingleton<IConfigTransferService, ConfigTransferService>();
|
||||
builder.Services.AddSingleton<IDatabaseSchemaMaintenanceService, DatabaseSchemaMaintenanceService>();
|
||||
builder.Services.AddSingleton<IDatabaseSeedService, DatabaseSeedService>();
|
||||
builder.Services.AddSingleton<IDatabaseInitializationService, DatabaseInitializationService>();
|
||||
builder.Services.AddSingleton<ISettingsPageService, SettingsPageService>();
|
||||
builder.Services.AddSingleton<IStandortePageService, StandortePageService>();
|
||||
builder.Services.AddSingleton<IStandorteSapEditorService, StandorteSapEditorService>();
|
||||
builder.Services.AddSingleton<IManagementCockpitPageService, ManagementCockpitPageService>();
|
||||
builder.Services.AddSingleton<IDashboardPageService, DashboardPageService>();
|
||||
builder.Services.AddSingleton<ILogsPageService, LogsPageService>();
|
||||
builder.Services.AddSingleton<ITransformationsPageService, TransformationsPageService>();
|
||||
builder.Services.AddSingleton<IUiTextService, UiTextService>();
|
||||
|
||||
// Datenquellen-Adapter (Strategy per ConnectionKind).
|
||||
builder.Services.AddSingleton<IDataSourceAdapter, HanaDataSourceAdapter>();
|
||||
builder.Services.AddSingleton<IDataSourceAdapter, SapGatewayDataSourceAdapter>();
|
||||
builder.Services.AddSingleton<IDataSourceAdapter, ManualExcelDataSourceAdapter>();
|
||||
builder.Services.AddSingleton<IDataSourceAdapterResolver, DataSourceAdapterResolver>();
|
||||
builder.Services.AddSingleton<ISiteExportService, SiteExportService>();
|
||||
|
||||
// Orchestrator mit gemeinsamem Status ueber alle Circuits.
|
||||
builder.Services.AddSingleton<ExportOrchestrationService>();
|
||||
builder.Services.AddSingleton<TimerBackgroundService>();
|
||||
builder.Services.AddHostedService(sp => sp.GetRequiredService<TimerBackgroundService>());
|
||||
|
||||
// UI-/Page-Services: Scoped = pro Blazor-Circuit.
|
||||
builder.Services.AddScoped<ISettingsPageService, SettingsPageService>();
|
||||
builder.Services.AddScoped<IStandortePageService, StandortePageService>();
|
||||
builder.Services.AddScoped<IStandorteSapEditorService, StandorteSapEditorService>();
|
||||
builder.Services.AddScoped<IManagementCockpitPageService, ManagementCockpitPageService>();
|
||||
builder.Services.AddScoped<IDashboardPageService, DashboardPageService>();
|
||||
builder.Services.AddScoped<ILogsPageService, LogsPageService>();
|
||||
builder.Services.AddScoped<ITransformationsPageService, TransformationsPageService>();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
using (var scope = app.Services.CreateScope())
|
||||
|
||||
Reference in New Issue
Block a user