.net Dependency Injection Example

5 min read Jun 03, 2024
.net Dependency Injection Example

L'injection de dépendances dans .NET : un exemple pratique

L'injection de dépendances est un principe fondamental de la programmation orientée objet qui permet de découpler les dépendances entre les différentes parties de votre code. En .NET, l'injection de dépendances est fortement encouragée et facilitée par le framework. Dans cet article, nous allons explorer un exemple concret de l'injection de dépendances en .NET.

Scénario: Une application de gestion de livres

Imaginons une application simple qui gère une bibliothèque de livres. Cette application possède un service BookService qui permet de gérer les livres, et un BookRepository qui stocke les informations des livres en base de données.

public class BookService
{
    private readonly IBookRepository _bookRepository;

    public BookService(IBookRepository bookRepository)
    {
        _bookRepository = bookRepository;
    }

    public void AddBook(Book book)
    {
        _bookRepository.AddBook(book);
    }
}

Dans cet exemple, BookService dépend de l'interface IBookRepository, qui définit les méthodes pour interagir avec la base de données. L'interface IBookRepository est une abstraction qui nous permet de découpler le BookService de l'implémentation concrète du repository.

public interface IBookRepository
{
    void AddBook(Book book);
}

public class SqlBookRepository : IBookRepository
{
    public void AddBook(Book book)
    {
        // Code pour ajouter un livre à la base de données SQL
    }
}

public class InMemoryBookRepository : IBookRepository
{
    public void AddBook(Book book)
    {
        // Code pour ajouter un livre à une liste en mémoire
    }
}

Nous avons deux implémentations concrètes de IBookRepository: SqlBookRepository pour une base de données SQL et InMemoryBookRepository pour une liste en mémoire. Grâce à l'injection de dépendances, nous pouvons choisir l'implémentation qui correspond à nos besoins sans modifier le BookService.

Injection de dépendances avec le conteneur de services

Le framework .NET fournit un conteneur de services qui facilite l'injection de dépendances. Pour utiliser le conteneur de services, nous devons d'abord l'enregistrer dans notre application.

// Dans le fichier Startup.cs (ou Program.cs pour .NET 6)
public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped();
    services.AddScoped();
}

Dans cet exemple, nous enregistrons SqlBookRepository comme l'implémentation de IBookRepository, et nous enregistrons BookService sans spécifier explicitement sa dépendance. Le conteneur de services va automatiquement injecter la dépendance IBookRepository dans le BookService.

Utilisation de l'injection de dépendances

Maintenant, nous pouvons utiliser le BookService dans notre application sans avoir à nous soucier de l'implémentation du repository.

// Dans un contrôleur ASP.NET Core
public class BookController : ControllerBase
{
    private readonly BookService _bookService;

    public BookController(BookService bookService)
    {
        _bookService = bookService;
    }

    public IActionResult AddBook(Book book)
    {
        _bookService.AddBook(book);
        // ...
    }
}

Le conteneur de services va injecter une instance de BookService dans le constructeur du BookController. Le BookService va ensuite utiliser l'instance de SqlBookRepository qui a été enregistrée précédemment.

Conclusion

L'injection de dépendances est un outil puissant qui permet d'améliorer la modularité, la testabilité et la maintenabilité de votre code. En utilisant l'injection de dépendances, vous pouvez facilement découpler les dépendances entre les différentes parties de votre code et faciliter le développement et la maintenance. L'exemple ci-dessus illustre la simplicité et la flexibilité de l'injection de dépendances en .NET.