Saltar al contenido
Tips de Sintaxis | Buenas prácticas | Auto-Doc AI

C# 12 Moderno: Refactoring con Primary Constructors e XML Docs

Scopri come eseguire il refactoring dei costruttori C# legacy usando i Primary Constructors di C# 12 e la documentazione XML.

2026-11-14 · Tips de Sintaxis | Buenas prácticas | Auto-Doc AI · CSHARP

Semplificazione della Dependency Injection con i Primary Constructors in C# 12

Lo sviluppo in C# si è evoluto notevolmente con .NET 8 e C# 12. Storicamente, l'iniezione delle dipendenze richiedeva la dichiarazione di campi privati in sola lettura (private readonly), la definizione di un costruttore esplicito e l'assegnazione manuale di ciascun parametro. Questo approccio produceva una notevole quantità di codice ripetitivo ("boilerplate"), rendendo le classi meno leggibili.

Con l'introduzione dei Primary Constructors in C# 12, è possibile dichiarare i parametri direttamente nella definizione della classe, riducendo drasticamente il numero di linee di codice senza rinunciare alla tipizzazione forte.

Codice Legacy: L'approccio tradizionale (Prima)

Nelle versioni precedenti a C# 12, una tipica classe di servizio con dipendenze si presentava così:

namespace JWDocs.Services;

/// <summary>
/// Servizio responsabile dell'elaborazione dei pagamenti.
/// </summary>
public class PaymentProcessor
{
    private readonly IPaymentGateway _gateway;
    private readonly ILogger _logger;

    /// <summary>
    /// Inizializza una nuova istanza di <see cref="PaymentProcessor"/>.
    /// </summary>
    /// <param name="gateway">Il provider di pagamento principale.</param>
    /// <param name="logger">Il servizio di registrazione di audit.</param>
    public PaymentProcessor(IPaymentGateway gateway, ILogger logger)
    {
        _gateway = gateway ?? throw new ArgumentNullException(nameof(gateway));
        _logger = logger ?? throw new ArgumentNullException(nameof(logger));
    }

    public async Task ProcessAsync(decimal amount)
    {
        _logger.LogInfo("Avvio pagamento...");
        await _gateway.ChargeAsync(amount);
    }
}

Refactoring Moderno in C# 12 (Dopo)

Utilizzando i costruttori primari e adattando i commenti XML in C# 12, la classe diventa immediatamente più pulita ed essenziale:

namespace JWDocs.Services;

/// <summary>
/// Servizio responsabile dell'elaborazione dei pagamenti.
/// </summary>
/// <param name="gateway">Il provider di pagamento principale.</param>
/// <param name="logger">Il servizio di registrazione di audit.</param>
public class PaymentProcessor(IPaymentGateway gateway, ILogger logger)
{
    public async Task ProcessAsync(decimal amount)
    {
        ArgumentNullException.ThrowIfNull(gateway);
        ArgumentNullException.ThrowIfNull(logger);

        logger.LogInfo("Avvio pagamento...");
        await gateway.ChargeAsync(amount);
    }
}

Integrazione con .NET Analyzers ed EditorConfig

Per garantire uniformità nello stile di codice all'interno del team, è consigliabile configurare le regole nell'archivio .editorconfig:

[*.cs]
dotnet_style_prefer_primary_constructors = true:suggestion

Documentazione Automatica con Auto-Doc AI

Quando si impiegano i Primary Constructors, i tag XML <param> vengono associati al blocco di documentazione della classe. Lo strumento Code Formatter & Auto-Doc AI individua automaticamente i parametri del costruttore primario e genera i tag XML corretti, garantendo la piena conformità alle regole StyleCop (SA1600) e agli standard Microsoft.

Conclusione e Best Practice

L'adozione dei Primary Constructors in C# 12 elimina il codice ridondante e migliora la leggibilità complessiva. Combinare questa funzionalità con le regole di EditorConfig e l'automazione di Auto-Doc AI assicura una codebase pulita, moderna e ben documentata.

Prova lo snippet nel formattatore

Vedi guida alla correzione: Come risolvere CS1026: ) expected in C# 12

Suggerimenti correlati