首頁  >  文章  >  後端開發  >  解釋C#中的依賴注入

解釋C#中的依賴注入

王林
王林轉載
2023-08-26 16:05:181514瀏覽

解釋C#中的依賴注入

依賴是另一個物件所依賴的物件。依賴注入(或反轉)基本上是提供對象所需的對象,而不是讓它自己建構對象。這是一種有用的技術,可以使測試變得更容易,因為它允許您模擬依賴關係。

例如,如果類別 A 呼叫類別 B 上的方法,而類別 B 又呼叫類別 C 上的方法,則表示A依賴B,B依賴C。使用依賴注入,我們可以將類別C的實例傳遞給類別B,並將B的實例傳遞給類別A,而不是讓這​​些類別建構B和C的實例.

在下面的範例中,類別Runner 依賴類別Logger。請注意,在類別 Runner 的建構函式中建立了 Logger 的實例。這段程式碼有一些問題。

  • 這將記錄器類別與 Runner 連結在一起,我們不能用其他類別來取代它, 無需修改Runner。

  • 如果Logger有任何依賴項,那麼Worker必須先配置它們 實例化 Logger。

  • 測試更加困難。如果Logger是資源密集型類,例如訪問 網路或檔案系統,它會減慢測試速度。我們無法輕易更換它。

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

使用依賴注入,我們修改 Runner 的建構子以接受介面 ILogger,而不是特定物件。我們更改 Logger 類別來實作 ILogger。這允許我們將 Logger 類別的實例傳遞給 Runner 的建構子。這樣做的好處是,在測試期間,我們可以建立一個實作 ILogger 的 TestLogger 類,並將其傳遞給 Runner 的建構子。

範例

 即時示範

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

輸出

Message to be logged

以上是解釋C#中的依賴注入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除