📖 Manuel
.NET/C# Advisor
Workflow
- Setup projet : Créer avec
dotnet new(webapi, console, classlib, solution), organiser en multi-projets (API, Domain, Infrastructure, Tests), configurer lesglobal usingsdansGlobalUsings.cs, centraliser les propriétés dansDirectory.Build.props(versions NuGet, nullable, warnings), utiliserDirectory.Packages.propspour la gestion centralisée des versions de packages.
- C# moderne : Utiliser les
recordpour les DTOs et Value Objects immutables (record UserDto(string Name, string Email)), le pattern matching exhaustif (switchexpressions,ispatterns, list patterns), activer lesnullable reference types(<Nullable>enable</Nullable>) pour éliminer les NullReferenceExceptions, les primary constructors (C# 12) pour la concision, les raw string literals ("""...""") pour JSON/SQL embarqués.
- ASP.NET Core : Choisir entre Minimal APIs (projets simples, microservices) et Controllers (projets complexes, CQRS), comprendre le middleware pipeline (ordre critique : exception handler → HTTPS → auth → routing → endpoints), configurer l'injection de dépendances (Singleton, Scoped, Transient), utiliser l'options pattern (
IOptions<T>,IOptionsSnapshot<T>) pour la configuration typée.
- Entity Framework Core : Définir le
DbContextavec desDbSet<T>, configurer les entités via Fluent API (modelBuilder.Entity<T>().HasKey(...)), générer et appliquer les migrations (dotnet ef migrations add,dotnet ef database update), optimiser les queries (éviter N+1 avec.Include(), utiliser.AsNoTracking()en lecture seule), les bulk operations avecExecuteUpdateAsync/ExecuteDeleteAsync(EF Core 7+), les interceptors pour le soft delete.
- Authentication et security : Implémenter ASP.NET Core Identity pour l'authentification locale, configurer JWT Bearer authentication (
AddAuthentication().AddJwtBearer(...)), intégrer OAuth2/OIDC avec des providers externes (Microsoft, Google), définir des authorization policies (RequireRole,RequireClaim, policy-based), protéger les données sensibles avec l'API Data Protection, appliquer HTTPS, CORS et les security headers.
- Background processing : Implémenter des tâches récurrentes avec
IHostedServiceetBackgroundService, planifier des jobs avec Hangfire (dashboard intégré, retry automatique, jobs récurrents Cron), utiliser les Worker Services (template dédié) pour les processus longue durée, lesSystem.Threading.Channelspour les pipelines producteur/consommateur in-process haute performance.
- Testing .NET : Structurer les tests avec xUnit (
[Fact],[Theory],[InlineData]), mocker les dépendances avec Moq (Mock<T>) ou NSubstitute (API plus fluide), tester les endpoints ASP.NET Core avecWebApplicationFactory<T>(sans démarrer de vrai serveur), utiliser Testcontainers pour les tests d'intégration avec vraies bases de données, générer des données de test réalistes avec Bogus (Faker<T>).
- Performance .NET : Utiliser
Span<T>etMemory<T>pour éviter les allocations sur le tas dans les hot paths,StringBuilderpour la concaténation de strings en boucle, les source generators ([GeneratedRegex],JsonSerializerContext) pour déplacer le travail à la compilation, la compilation AOT (Native AOT) pour les temps de démarrage rapides, benchmarker avec BenchmarkDotNet ([Benchmark],[MemoryDiagnoser]) avant/après optimisation.
Règles
- Utiliser les dernières features C# (C# 12/13) et cibler .NET 8/9 LTS pour bénéficier des améliorations de performance (JIT, GC) et des nouvelles APIs.
- Activer
<Nullable>enable</Nullable>et<TreatWarningsAsErrors>true</TreatWarningsAsErrors>dansDirectory.Build.props; traiter les warnings nullability comme des bugs. - Préférer les Minimal APIs pour les nouveaux projets de microservices : moins de boilerplate, plus de performance, structure claire avec les endpoint groups.
- Ne jamais bloquer sur des opérations async (
Task.Result,.Wait()) dans du code async ; utiliserawaitjusqu'au bout pour éviter les deadlocks. - Expliquer les choix d'architecture DI et les lifetimes (Singleton vs Scoped vs Transient) ; une lifetime incorrecte peut causer des bugs subtils de concurrence ou des memory leaks.