Dependency injection

De Banane Atomic
Aller à la navigationAller à la recherche

Définition

Implémente le principe de l'Inversion of Control.
Permet de découpler les dépendances entre objets.
Les dépendances ne sont plus exprimées de manière statique dans le code mais déterminées dynamiquement à l'exécution.
The DI delegates the creation of a service that an object consumes outside of this object.

Exemple

Le MainViewModel veut utiliser le DataService mais ne veut pas:

  • de lien statique avec la classe DataService
  • prendre en charge sa construction

Dépendance entre MainViewModel et DataService

  • lien statique avec la classe DataService
  • prend en charge la construction de DataService
Csharp.svg
class MainViewModel
{
    private DataService _dataService;
    public MainViewModel()
    {
        _dataService = new DataService();
    }
}

Création d'une interface

  • plus lien statique avec la classe DataService grâce à l'interface IDataService
  • prend en charge la construction de DataService
Csharp.svg
interface IDataService { }

class DataService : IDataService { }

class MainViewModel
{
    private IDataService _dataService;
    public MainViewModel()
    {
        _dataService = new DataService();
    }
}

Injection du service

  • plus lien statique avec la classe DataService grâce à l'interface IDataService
  • le DataService est injecté dans le constructeur de MainViewModel
Csharp.svg
class MainViewModel
{
    private IDataService _dataService;
    // la création du service se fait en dehors de la classe qui l'utilise
    public MainViewModel(IDataService dataService)
    {
        _dataService = dataService;
    }
}