using Microsoft.AspNetCore.Components; using System; using System.Diagnostics; namespace GWMS.UI.Components { public abstract class BaseComp : ComponentBase, IDisposable { #region Public Methods public virtual void Dispose() { // Opzionale: logga quando l'utente lascia la pagina/componente } #endregion Public Methods #region Protected Fields /// /// Sorgente statica condivisa per tutto il layer UI /// protected static readonly ActivitySource UIActivitySource = new ActivitySource("GWMS.UI"); #endregion Protected Fields #region Protected Properties [Inject] protected NavigationManager Navigation { get; set; } = default!; #endregion Protected Properties #region Protected Methods /// /// Avvia un'attività tracciata con metadati standard del componente /// protected Activity? StartTracing(string operationName) { // Verifica se qualcuno sta ascoltando questa sorgente if (!UIActivitySource.HasListeners()) return null; // init activity con nome gestito var activity = UIActivitySource.StartActivity($"{GetType().Name}:{operationName}"); // Aggiungiamo tag standard utili per il debug su Uptrace activity?.SetTag("ui.component_type", GetType().Name); activity?.SetTag("ui.url", Navigation.Uri); activity?.SetTag("data.source", "UI"); return activity; } #endregion Protected Methods } }