Abhängigkeitsinjektion in C# erklärt

王林
Freigeben: 2023-08-26 16:05:18
nach vorne
1549 Leute haben es durchsucht

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);
   }
}
Nach dem Login kopieren

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);
   }
}
Nach dem Login kopieren

Ausgabe

Message to be logged
Nach dem Login kopieren

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!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!