Heim  >  Artikel  >  Backend-Entwicklung  >  Abhängigkeitsinjektion in C# erklärt

Abhängigkeitsinjektion in C# erklärt

王林
王林nach vorne
2023-08-26 16:05:181580Durchsuche

Abhängigkeitsinjektion in C# erklärt

Eine Abhängigkeit ist ein Objekt, von dem ein anderes Objekt abhängt. Bei der Abhängigkeitsinjektion (oder Inversion) handelt es sich im Wesentlichen darum, einem Objekt die benötigten Objekte bereitzustellen, anstatt es das Objekt selbst erstellen zu lassen. Dies ist eine nützliche Technik, die das Testen erleichtert, da Sie damit Abhängigkeiten simulieren können.

Wenn beispielsweise Klasse A eine Methode für Klasse B aufruft und Klasse B eine Methode für Klasse C aufruft, bedeutet dies, dass A von B und B von C abhängt. Mithilfe der Abhängigkeitsinjektion können wir eine Instanz von Klasse C an Klasse B und eine Instanz von B an Klasse A übergeben, anstatt dass diese Klassen Instanzen von B und C erstellen.

Im folgenden Beispiel hängt die Klasse Runner vom Class Logger ab . Beachten Sie, dass im Konstruktor der Klasse Runner eine Instanz von Logger erstellt wird. Es gibt einige Probleme mit diesem Code.

  • Dadurch wird die Logger-Klasse an den Runner gebunden. Wir können sie nicht durch eine andere Klasse ersetzen. Der Runner muss nicht geändert werden.

  • Wenn Logger Abhängigkeiten hat, muss Worker diese zuerst konfigurieren Instanziieren Sie den Logger.

  • Der Test ist schwieriger. Wenn Logger eine ressourcenintensive Klasse ist, z. B. Zugriff Netzwerk oder Dateisystem, was den Test verlangsamen kann. Wir können es nicht einfach ersetzen.

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);
   }
}

Mithilfe der Abhängigkeitsinjektion ändern wir den Konstruktor von Runner so, dass er die Schnittstelle ILogger anstelle eines konkreten Objekts akzeptiert. Wir ändern die Logger-Klasse, um ILogger zu implementieren. Dadurch können wir eine Instanz der Logger-Klasse an den Runner-Konstruktor übergeben. Dies hat den Vorteil, dass wir während des Testens eine TestLogger-Klasse erstellen können, die ILogger implementiert, und diese an den Konstruktor des Runners übergeben können.

Beispiel

Echtzeitdemonstration

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);
   }
}

Ausgabe

Message to be logged

Das obige ist der detaillierte Inhalt vonAbhängigkeitsinjektion in C# erklärt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Welche Klassen gibt es in C#?Nächster Artikel:Welche Klassen gibt es in C#?