Injection de dépendances
IntermédiaireASP.NET Core embarque un conteneur d'injection de dépendances (DI). Trois durées de vie principales :
var builder = WebApplication.CreateBuilder(args);
// Singleton : une seule instance pour toute la durée de vie de l'app
builder.Services.AddSingleton<ICacheService, MemoryCacheService>();
// Scoped : une instance par requête HTTP (idéal pour un DbContext EF Core)
builder.Services.AddScoped<IUtilisateurRepository, UtilisateurRepository>();
// Transient : une nouvelle instance à chaque injection
builder.Services.AddTransient<IEmailSender, SmtpEmailSender>();
var app = builder.Build();
// Le framework injecte automatiquement les dépendances dans les handlers
app.MapGet("/utilisateurs", (IUtilisateurRepository repo) => repo.Tous());
public interface IUtilisateurRepository
{
Task<IEnumerable<Utilisateur>> TousAsync();
}
public class UtilisateurRepository(AppDbContext db) : IUtilisateurRepository
{
public async Task<IEnumerable<Utilisateur>> TousAsync() =>
await db.Utilisateurs.ToListAsync();
}
Astuce : les primary constructors (
UtilisateurRepository(AppDbContext db)directement sur la classe) évitent d'écrire un constructeur classique juste pour stocker une dépendance dans un champ privé.