Injection de dépendances en C# expliquée

王林
Libérer: 2023-08-26 16:05:18
avant
1550 Les gens l'ont consulté

Injection de dépendances en C# expliquée

Une dépendance est un objet dont dépend un autre objet. L'injection de dépendances (ou inversion) consiste essentiellement à fournir à un objet les objets dont il a besoin au lieu de le laisser construire l'objet lui-même. Il s'agit d'une technique utile qui facilite les tests car elle vous permet de simuler les dépendances.

Par exemple, si la classe A appelle une méthode sur la classe B et que la classe B appelle une méthode sur la classe C, cela signifie que A dépend de B et B dépend de C. En utilisant l'injection de dépendances, nous pouvons transmettre une instance de classe C à la classe B et une instance de B à la classe A, au lieu de laisser ces classes construire des instances de B et C.

Dans l'exemple ci-dessous, la classe Runner dépend de Class Logger . Notez qu'une instance de Logger est créée dans le constructeur de la classe Runner. Il y a quelques problèmes avec ce code.

  • Cela lie la classe Logger au Runner, nous ne pouvons pas la remplacer par une autre classe, Pas besoin de modifier le Runner.

  • Si Logger a des dépendances, Worker doit d'abord les configurer Instanciez le Logger.

  • L'épreuve est plus difficile. Si Logger est une classe gourmande en ressources, comme l'accès réseau ou système de fichiers, ce qui peut ralentir le test. Nous ne pouvons pas le remplacer facilement.

using System;
class Program{
   static void Main(string[] args){
      var runner = new Runner();
      runner.Run();
   }
}
class Runner{
   private Logger _logger;
   public Runner(){
      _logger = new Logger();
   }
   public void Run(){
      // Do some work
      _logger.Log("Message to be logged");
   }
}
class Logger{
   public void Log(string message){
      Console.WriteLine(message);
   }
}
Copier après la connexion

À l'aide de l'injection de dépendances, nous modifions le constructeur de Runner pour accepter l'interface ILogger au lieu d'un objet concret. Nous modifions la classe Logger pour implémenter ILogger. Cela nous permet de passer une instance de la classe Logger au constructeur Runner. L'avantage est que pendant les tests, nous pouvons créer une classe TestLogger qui implémente ILogger et la transmettre au constructeur du Runner.

Exemple

Démonstration en temps réel

using System;
class Program{
   static void Main(string[] args){
      var logger = new Logger();
      var runner = new Runner(logger);
      runner.Run();
   }
}
class Runner{
   private ILogger _logger;
   public Runner(ILogger logger){
      _logger = logger;
   }
   public void Run(){
      // Do some work
      _logger.Log("Message to be logged");
   }
}
interface ILogger{
   void Log(string message);
}
class Logger : ILogger{
   public void Log(string message){
      Console.WriteLine(message);
   }
}
Copier après la connexion

Sortie

Message to be logged
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!