Dependency injection

De Banane Atomic
Révision datée du 25 octobre 2019 à 14:43 par Nicolas (discussion | contributions) (→‎IoC frameworks)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
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 de 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 de lien statique avec la classe DataService grâce à l'interface IDataService
  • un objet 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;
    }
}

IoC frameworks