Sobes.tech
Middle

Qu'est-ce que l'injection de dépendances (DI) dans ASP.NET Core?

sobes.tech IA

Réponse de l'IA

L'injection de dépendances (DI) est un patron de conception pour l'inversion de contrôle (IoC), qui permet de créer un code faiblement couplé. Dans ASP.NET Core, DI est une fonctionnalité intégrée qui facilite la gestion des dépendances entre classes.

Les composants principaux de DI dans ASP.NET Core :

  1. Services : Objets fournissant des fonctionnalités (par exemple, classes de référentiels, services de journalisation).
  2. Conteneur DI : Objet responsable de résoudre les dépendances et de créer des instances de services.
  3. Cycle de vie des services : Détermine quand et comment les instances de services sont créées :
    • Transient : Une nouvelle instance est créée à chaque requête de service.
    • Scoped : Une instance par requête (pour les applications web, par chaque requête HTTP).
    • Singleton : Une instance est créée lors de la première requête et utilisée tout au long de l'exécution de l'application.

Avantages de l'utilisation de DI :

  • Faible couplage : Les classes dépendent d'abstractions (interfaces), et non d'implémentations concrètes.
  • Testabilité : Facile de remplacer les dépendances réelles par des "mocks" ou des "stubs" lors des tests unitaires.
  • Extensibilité : Facile de remplacer les implémentations de services sans modifier le code dépendant.
  • Gestion des dépendances : Le conteneur DI gère le cycle de vie et la création des instances.

Exemple d'enregistrement de services dans Startup.cs (ou Program.cs en .NET 6+) :

// Dans la méthode ConfigureServices
public void ConfigureServices(IServiceCollection services)
{
    // Enregistrement d'un service avec un cycle de vie singleton
    services.AddSingleton<ILogger, EmailLogger>();

    // Enregistrement d'un service avec un cycle de vie scoped
    services.AddScoped<IDataRepository, SqlDataRepository>();

    // Enregistrement d'un service avec un cycle de vie transient
    services.AddTransient<ITransientService, TransientService>();

    // Enregistrement des contrôleurs pour l'injection de dépendances
    services.AddControllersWithViews();
}
Injection de dépendances dans le constructeur du contrôleur :

```csharp
public class HomeController : Controller
{
    private readonly ILogger _logger;
    private readonly IDataRepository _repository;

    // ASP.NET Core DI résout et injecte automatiquement ces dépendances
    public HomeController(ILogger logger, IDataRepository repository)
    {
        _logger = logger;
        _repository = repository;
    }

    // ... actions du contrôleur
}