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

C# 12 Moderne : Refactoring avec Primary Constructors et XML Docs

Découvrez comment refactoriser les constructeurs C# legacy avec les Primary Constructors C# 12 et la documentation XML sous .NET.

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

Simplification de l'injection de dépendances avec les Primary Constructors en C# 12

L'écosystème C# a fortement évolué avec l'arrivée de .NET 8 et C# 12. Historiquement, l'injection de dépendances imposait de déclarer des champs privés en lecture seule (private readonly), de définir un constructeur explicite et d'assigner manuellement chaque argument. Cette approche générait du code verbeux et répétitif, rendant la lecture du code métier plus complexe.

Avec l'introduction des Primary Constructors dans C# 12, les paramètres peuvent être déclarés directement dans l'en-tête de la classe, réduisant considérablement le nombre de lignes tout en conservant la sûreté du typage.

Code Legacy : L'approche traditionnelle (Avant)

Dans les versions antérieures à C# 12, une classe de service classique avec plusieurs dépendances ressemblait à ceci :

namespace JWDocs.Services;

/// <summary>
/// Service chargé du traitement des paiements des clients.
/// </summary>
public class PaymentProcessor
{
    private readonly IPaymentGateway _gateway;
    private readonly ILogger _logger;

    /// <summary>
    /// Initialise une nouvelle instance de <see cref="PaymentProcessor"/>.
    /// </summary>
    /// <param name="gateway">Le fournisseur de paiement principal.</param>
    /// <param name="logger">Le service de journalisation d'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("Traitement du paiement...");
        await _gateway.ChargeAsync(amount);
    }
}

Refactoring Moderne en C# 12 (Après)

En appliquant les constructeurs primaires et la documentation XML adaptée de C# 12, la classe devient nettement plus concise :

namespace JWDocs.Services;

/// <summary>
/// Service chargé du traitement des paiements des clients.
/// </summary>
/// <param name="gateway">Le fournisseur de paiement principal.</param>
/// <param name="logger">Le service de journalisation d'audit.</param>
public class PaymentProcessor(IPaymentGateway gateway, ILogger logger)
{
    public async Task ProcessAsync(decimal amount)
    {
        ArgumentNullException.ThrowIfNull(gateway);
        ArgumentNullException.ThrowIfNull(logger);

        logger.LogInfo("Traitement du paiement...");
        await gateway.ChargeAsync(amount);
    }
}

Intégration avec les .NET Analyzers et EditorConfig

Pour maintenir des standards homogènes au sein des équipes de développement, configurez l'analyse statique dans votre fichier .editorconfig :

[*.cs]
dotnet_style_prefer_primary_constructors = true:suggestion

Documentation Automatique avec Auto-Doc AI

Avec les Primary Constructors, la documentation XML évolue : les balises <param> sont désormais directement intégrées au bloc de commentaire de la classe. Notre outil Code Formatter & Auto-Doc AI extrait automatiquement les paramètres du constructeur primaire et génère la documentation XML conforme aux règles StyleCop (SA1600) et aux recommandations de Microsoft.

Conclusion et Bonnes Pratiques

L'utilisation des Primary Constructors en C# 12 réduit le code superflu et améliore la lisibilité globale des projets. Associer cette fonctionnalité moderne aux règles EditorConfig et à l'automatisation Auto-Doc AI garantit un code propre et parfaitement documenté.

Tester l'extrait dans le formateur

Voir le guide de correction: Comment corriger CS1026: ) expected dans C# 12

Astuces associées