Files
mapo-core/MP.SPEC/refactor_repository.md
T
Samuele Locatelli 7c9406682c SPEC:
- pulizia vecchio controller/repository globale
- pulizia MpDataService
- aggiunta file readme progetto
- update refactor progetto e config
2026-06-04 13:45:46 +02:00

7.4 KiB

Refactoring Repository: Decomposizione MpSpecController - STATO COMPLETO

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.cs
  • MP.Data/Repository/Anag/AnagRepository.cs
  • MP.Data/Repository/Production/IProductionRepository.cs
  • MP.Data/Repository/Production/ProductionRepository.cs
  • MP.Data/Repository/Dossier/IDossierRepository.cs
  • MP.Data/Repository/Dossier/DossierRepository.cs
  • MP.Data/Repository/FluxLog/IFluxLogRepository.cs
  • MP.Data/Repository/FluxLog/FluxLogRepository.cs
  • MP.Data/Repository/System/ISystemRepository.cs
  • MP.Data/Repository/System/SystemRepository.cs
  • MP.Data/Repository/MpVoc/IMpVocRepository.cs
  • MP.Data/Repository/MpVoc/MpVocRepository.cs
  • MP.Data/Repository/MpMon/IMpMonRepository.cs
  • MP.Data/Repository/MpMon/MpMonRepository.cs
  • MP.Data/Repository/MpLand/IMpLandRepository.cs
  • MP.Data/Repository/MpLand/MpLandRepository.cs

Verifiche

  • Nessun riferimento a dbController.XXX() nei file di servizio
  • ArticleWithDossierAsync esportato correttamente (rimossi #if false)
  • VocabolarioGetLang reso sincrono (firma originale sincrona)
  • tryLoadIobTags in StatusData usa GetAwaiter().GetResult() (contesto sync)
  • InitDict in TranslateSrv usa GetAwaiter().GetResult() (contesto sync)
  • Tutti i 10 progetti buildano con 0 errori
  • Niente static _configuration nei controllers MP.AppAuth
  • Niente new() di controllers fuori dal DI
  • AppAuthService correttamente 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 false come ultima fase di pulizia
  • Rimangono come fallback documentato