</>
Plan du cours — 18/46

Injection de dépendances

Intermédiaire

ASP.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é.