Injection de dépendances en .Net Core [ Partie 2 : Mise en œuvre]
L’injection de dépendances peut être réalisée de 3 manières :
- Injection via une méthode
- Injection via une propriété
- Injection via le constructeur
Injection via une méthode
La dépendance est injectée via une méthode de la classe.
public class MainView
{
private OpelService _opelService;
public void SetOpelService(OpelService opelService)
{
_opelService = opelService;
}
public List<string> GetCarList()
{
return _opelService.GetCarNameList();
}
}
Injection via une propriété
La dépendance est injectée via une propriété de la classe.
public class MainView
{
private OpelService _opelService;
public OpelService OpelService
{
set { _opelService = value; }
}
public List<string> GetCarList()
{
return _opelService.GetCarNameList();
}
}
Injection via le constructeur
La dépendance est injectée directement via le constructeur de la classe. Cette méthode d’injection permet d’informer directement sur les dépendances utilisées par la classe. Elle est la plus courante et c’est cette méthode que nous utiliserons dans la suite de ce tutoriel.
public class MainView
{
private readonly OpelService _opelService;
public MainView(OpelService opelService)
{
_opelService = opelService;
}
public List<string> GetCarList()
{
return _opelService.GetCarNameList();
}
}
L’injection de la dépendance est bien réalisée mais la classe est toujours fortement liée à la classe OpelService. Il n’est toujours pas possible de mocker la classe OpelService pour réaliser des tests unitaires sur notre méthode GetCarList().
Pour résoudre ce problème, plutôt que d’injecter la classe OpelService (et donc son implémentation), nous allons injecter une interface ICarService, qui sera implémentée dans la classe OpelService.
public class MainView
{
private readonly ICarService _carService;
public MainView(ICarService carService)
{
_carService = carService;
}
public List<string> GetCarList()
{
return _carService.GetCarNameList();
}
}
Comme nous avons supprimé la dépendance forte, si notre garage décide de changer pour vendre des voitures de marque Audi, notre classe MainView n’aura plus besoin d’une quelconque modification.
Dans la partie 3, nous allons découvrir le container IOC de .Net core qui permet d’automatiser l’injection de dépendances.