Aller au contenu

Dependency injection

De Banane Atomic
Version 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)

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
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
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
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