7c9406682c
- pulizia vecchio controller/repository globale - pulizia MpDataService - aggiunta file readme progetto - update refactor progetto e config
7.4 KiB
7.4 KiB
Refactoring Repository: Decomposizione MpSpecController - STATO COMPLETO
Riepilogo
| Progetto | Build | Errori |
|---|---|---|
| MP.Data | OK | 0 |
| MP.SPEC | OK | 0 |
| MP.Land | OK | 0 |
| MP.MON | OK | 0 |
| MP-TAB3 | OK | 0 |
| MP.Stats | OK | 0 |
| MP.INVE | OK | 0 |
| MP.IOC | OK | 0 |
| MP.RIOC | OK | 0 |
| MP.Prog | OK | 0 |
| IobConf | OK | 0 |
Tutte le 10 soluzioni della codebase compilano con successo.
Repository Creati (8 nuovi)
| # | Repository | Interfaccia | Metodi | DbContext |
|---|---|---|---|---|
| 1 | Anag | IAnagRepository |
26 | MoonProContext |
| 2 | Production | IProductionRepository |
32 | MoonProContext |
| 3 | Dossier | IDossierRepository |
6 | MoonPro_FluxContext |
| 4 | FluxLog | IFluxLogRepository |
3 | MoonPro_FluxContext |
| 5 | System | ISystemRepository |
7 | MoonProContext + MoonProAdminContext |
| 6 | MpVoc | IMpVocRepository |
3 | MoonPro_VocContext |
| 7 | MpMon | IMpMonRepository |
4 | MoonProContext |
| 8 | MpLand | IMpLandRepository |
6 | MoonProContext |
Sostituzioni dbController Completate
| File Originale | Sostituito con | Chiamate | Stato |
|---|---|---|---|
| MpDataService.cs | 5 repository (Anag, System, Dossier, FluxLog, Production) | ~90 | Completato |
| TranslateSrv.cs | IMpVocRepository |
7 | Completato |
| StatusData.cs | IMpMonRepository |
10 | Completato |
| LandDataService.cs | IMpLandRepository |
9 | Completato |
| OrderDataSrv.cs | System + Production | 2 | Completato |
| ListSelectDataSrv.cs | System + Production | 4 | Completato |
Architettura DI (DataServiceCollectionExtensions.cs)
// Repository Scoped
services.TryAddScoped<IAnagRepository, AnagRepository>();
services.TryAddScoped<IProductionRepository, ProductionRepository>();
services.TryAddScoped<IDossierRepository, DossierRepository>();
services.TryAddScoped<IFluxLogRepository, FluxLogRepository>();
services.TryAddScoped<ISystemRepository, SystemRepository>();
services.TryAddScoped<IMpMonRepository, MpMonRepository>();
servicesTryAddScoped<IMpVocRepository, MpVocRepository>();
services.TryAddScoped<IMpLandRepository, MpLandRepository>();
// Controllers MP.AppAuth - Scoped (dipendenze di AppAuthService)
services.TryAddScoped<AppAuthController>();
services.TryAddScoped<MPController>();
services.TryAddScoped<AppUserController>();
services.TryAddScoped<AppAuthService>();
// Servizi Singleton
services.TryAddSingleton<MpDataService>();
services.TryAddSingleton<IMtcSetupRepository, MtcSetupRepository>();
services.TryAddSingleton<IMtcSetupService, MtcSetupService>();
services.TryAddSingleton<SyncService>();
services.TryAddSingleton<TabDataService>();
services.TryAddSingleton<LandDataService>();
services.TryAddSingleton<SharedMemService>();
// Servizi Scoped
services.TryAddScoped<IIocRepository, IocRepository>();
services.TryAddScoped<IStatsAggrRepository, StatsAggrRepository>();
services.TryAddScoped<IStatsDetailRepository, StatsDetailRepository>();
services.TryAddScoped<IIocService, IocService>();
services.TryAddScoped<IStatsAggrService, StatsAggrService>();
services.TryAddScoped<IStatsDetailService, StatsDetailService>();
services.TryAddScoped<OrderDataSrv>();
services.TryAddScoped<ListSelectDataSrv>();
Livello MP.AppAuth - Refactoring DI Completato (Giugno 2026)
Problema
AppAuthService (Scoped) conteneva istanze statiche dei controller e li creava con new() nel costruttore, causando race condition e null reference errors.
Fix Applicati
| File | Problema | Fix |
|---|---|---|
AppAuthController.cs |
static IConfiguration _configuration sovrascritto da ogni istanza |
readonly IConfiguration _configuration |
MPController.cs |
static IConfiguration _configuration + static dbController |
readonly istanza + dispose standard |
AppUserController.cs |
static IConfiguration = null! |
readonly IConfiguration _configuration |
AppAuthService.cs |
Creava controllers con new() → bypassava DI |
Constructor accetta controllers via DI |
MpLandController.cs (MP.Data) |
static IConfiguration _configuration + Dispose che impostava null |
readonly IConfiguration + dispose standard |
BaseServ.cs (MP.Data) |
protected static IConfiguration _configuration |
protected IConfiguration (istanza) |
LandDataService.cs (MP.Data) |
public static MpLandController dbController vuoto |
Campo rimosso |
DataServiceCollectionExtensions.cs (MP.Data) |
AppAuthService non registrata con dipendenze |
AddLandDataLayer() e AddSpecDataLayer() registrano controller + servizio |
Livelli DI per progetto
| Progetto | Estensione DI | Registrazione |
|---|---|---|
| MP.SPEC | AddSpecDataLayer() |
Repository + controllers + AppAuthService (Scoped) |
| MP.Land | AddLandDataLayer() |
Repository + controllers + AppAuthService (Scoped) |
| MP.MON | AddMonDataLayer() |
Repository + MonDataFeeder (Singleton) |
| MP.IOC | AddIocDataLayer() |
Repository + servizi IOC (Scoped/Singleton) |
| MP-PROG / MP-INVE / MP-STATS / MP-TAB3 / MP-RIOC / IobConf | Registration nel respective Program.cs | Completa e funzionante |
File Modificati per Fix DI
MP.AppAuth/Controllers/AppAuthController.cs(static → readonly)MP.AppAuth/Controllers/MPController.cs(static → readonly, dispose corretto)MP.AppAuth/Controllers/AppUserController.cs(static → readonly)MP.AppAuth/Services/AppAuthService.cs(DI constructor injection)MP.Data/Controllers/MpLandController.cs(static → readonly)MP.Data/Services/BaseServ.cs(static → instancia)MP.Data/Services/LandDataService.cs(campo statico rimosso)MP.Data/DataServiceCollectionExtensions.cs(registrazioni DI corrette)
File Nuovi (8)
MP.Data/Repository/Anag/IAnagRepository.csMP.Data/Repository/Anag/AnagRepository.csMP.Data/Repository/Production/IProductionRepository.csMP.Data/Repository/Production/ProductionRepository.csMP.Data/Repository/Dossier/IDossierRepository.csMP.Data/Repository/Dossier/DossierRepository.csMP.Data/Repository/FluxLog/IFluxLogRepository.csMP.Data/Repository/FluxLog/FluxLogRepository.csMP.Data/Repository/System/ISystemRepository.csMP.Data/Repository/System/SystemRepository.csMP.Data/Repository/MpVoc/IMpVocRepository.csMP.Data/Repository/MpVoc/MpVocRepository.csMP.Data/Repository/MpMon/IMpMonRepository.csMP.Data/Repository/MpMon/MpMonRepository.csMP.Data/Repository/MpLand/IMpLandRepository.csMP.Data/Repository/MpLand/MpLandRepository.cs
Verifiche
- ✅ Nessun riferimento a
dbController.XXX()nei file di servizio - ✅
ArticleWithDossierAsyncesportato correttamente (rimossi#if false) - ✅
VocabolarioGetLangreso sincrono (firma originale sincrona) - ✅
tryLoadIobTagsin StatusData usaGetAwaiter().GetResult()(contesto sync) - ✅
InitDictin TranslateSrv usaGetAwaiter().GetResult()(contesto sync) - ✅ Tutti i 10 progetti buildano con 0 errori
- ✅ Niente
static _configurationnei controllers MP.AppAuth - ✅ Niente
new()di controllers fuori dal DI - ✅
AppAuthServicecorrettamente registrato in tutti le applicazioni
MpSpecRepository (MpSpecController)
I metodi sono ancora visibili nel file ma:
- Non sono usati dai layer superiori (tutti migrati ai repository)
- Possono essere spostati a
#if falsecome ultima fase di pulizia - Rimangono come fallback documentato