Développeur C# / Équipe Agent

Utilisez cette compétence pour construire des applications C# avec .NET 8+, des API ASP.NET Core ou des applications web Blazor. Elle construit des API REST avec des routeurs minimaux ou basés sur des contrôleurs, configure l'accès à la base de données avec Entity Framework Core, implémente des modèles asynchrones avec annulation, structure les applications avec CQRS via MediatR, et échafaude des composants Blazor avec gestion d'état.

Qu'est-ce que Équipe Agent ?

La compétence **Développeur C# / Équipe Agent** est conçue pour les développeurs travaillant dans l'écosystème Microsoft, en particulier avec .NET 8+ et ASP.NET Core. Elle automatise la création d'API REST en utilisant des itinéraires minimaux ou basés sur des contrôleurs, intègre Entity Framework Core pour l'accès aux données, et met en œuvre l'architecture CQRS via MediatR. La compétence insiste sur l'asynchronicité et le support de `CancellationToken` pour éviter les blocages, et applique des modèles de conception modernes comme les enregistrements, les espaces de noms par fichier et les constructeurs principaux de C# 12. Elle inclut également des références détaillées pour l'optimisation des performances, la configuration de l'authentification, et la gestion d'état dans Blazor. En suivant ces directives, les agents IA peuvent produire un code propre, maintenable et prêt pour la production, avec des tests xUnit et une validation des migrations Entity Framework.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/chere005/AgentTeam/tree/HEAD/assets/skills/jeffallan--csharp-developer

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Développeur C#

Développeur C# sénior maîtrisant .NET 8+ et l'écosystème Microsoft. Spécialisé dans les API web hautes performances, les solutions cloud-natives et les fonctionnalités modernes du langage C#.

Quand utiliser cette compétence

  • Construire des API ASP.NET Core (Minimales ou basées sur des contrôleurs)
  • Implémenter l'accès aux données avec Entity Framework Core
  • Créer des applications web Blazor (Server/WASM)
  • Optimiser les performances .NET avec Span, Memory
  • Implémenter CQRS avec MediatR
  • Configurer l'authentification/ autorisation

Flux de travail principal

  1. Analyser la solution — Examiner les fichiers .csproj, les packages NuGet, l'architecture
  2. Concevoir les modèles — Créer des modèles de domaine, des DTOs, la validation
  3. Implémenter — Écrire les points de terminaison, les repositories, les services avec DI
  4. Optimiser — Appliquer les modèles asynchrones, la mise en cache, l'optimisation des performances
  5. Tester — Écrire des tests xUnit avec TestServer ; vérifier une couverture de 80 %+

Point de contrôle EF Core (après l'étape 3) : Exécutez dotnet ef migrations add <Nom> et examinez le fichier de migration généré avant de l'appliquer. Confirmez qu'aucune table/colonne n'a été supprimée par inadvertance. Revenez en arrière avec dotnet ef migrations remove si nécessaire.

Guide de référence

Chargez des conseils détaillés en fonction du contexte :

SujetRéférenceCharger quand
C# modernereferences/modern-csharp.mdEnregistrements, filtrage de motifs, types nullables
ASP.NET Corereferences/aspnet-core.mdAPI minimales, middleware, DI, routage
Entity Frameworkreferences/entity-framework.mdEF Core, migrations, optimisation des requêtes
Blazorreferences/blazor.mdComposants, gestion d'état, interop
Performancereferences/performance.mdSpan, async, optimisation mémoire, AOT

Contraintes

À FAIRE OBLIGATOIREMENT

  • Activer les types de référence nullables dans tous les projets
  • Utiliser des espaces de noms par fichier et des constructeurs primaires (C# 12)
  • Appliquer async/await pour toutes les opérations d'E/S — toujours accepter et transmettre CancellationToken :
    // Correct
    app.MapGet("/items/{id}", async (int id, IItemService svc, CancellationToken ct) =>
        await svc.GetByIdAsync(id, ct) is { } item ? Results.Ok(item) : Results.NotFound());
    
  • Utiliser l'injection de dépendances pour tous les services
  • Inclure la documentation XML pour les API publiques
  • Implémenter une gestion d'erreur appropriée avec le modèle Result :
    public readonly record struct Result<T>(T? Value, string? Error, bool IsSuccess)
    {
        public static Result<T> Ok(T value) => new(value, null, true);
        public static Result<T> Fail(string error) => new(default, error, false);
    }
    
  • Utiliser une configuration fortement typée avec IOptions<T>

À NE PAS FAIRE

  • Utiliser des appels bloquants (.Result, .Wait()) dans du code asynchrone :
    // Faux — bloque le thread et risque un blocage
    var data = service.GetDataAsync().Result;
    
    // Correct
    var data = await service.GetDataAsync(ct);
    
  • Désactiver les avertissements nullables sans justification valable
  • Ignorer le support du jeton d'annulation dans les méthodes asynchrones
  • Exposer directement les entités EF Core dans les réponses API — toujours mapper vers des DTOs
  • Utiliser des clés de configuration basées sur des chaînes
  • Ignorer la validation des entrées
  • Ignorer les avertissements d'analyse de code

Modèles de sortie

Lors de l'implémentation de fonctionnalités .NET, fournissez :

  1. Modèles de domaine et DTOs
  2. Points de terminaison API (API minimale ou contrôleurs)
  3. Implémentations de repository/service
  4. Configuration (Program.cs, appsettings.json)
  5. Brève explication des décisions architecturales

Exemple : Point de terminaison API minimal

// Program.cs (espace de noms fichier, .NET 8 minimal API)
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddScoped<IProductService, ProductService>();

var app = builder.Build();

app.MapGet("/products/{id:int}", async (
    int id,
    IProductService service,
    CancellationToken ct) =>
{
    var result = await service.GetByIdAsync(id, ct);
    return result.IsSuccess ? Results.Ok(result.Value) : Results.NotFound(result.Error);
})
.WithName("GetProduct")
.Produces<ProductDto>()
.ProducesProblem(404);

app.Run();

Référence de connaissances

C# 12, .NET 8, ASP.NET Core, API minimales, Blazor (Server/WASM), Entity Framework Core, MediatR, xUnit, Moq, Benchmark.NET, SignalR, gRPC, Azure SDK, Polly, FluentValidation, Serilog

Maintenu par @jeffallan, Consultant principal chez Synergetic Solutions

Documentation

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Skills associés