C# での依存性注入の説明

王林
王林転載
2023-08-26 16:05:181586ブラウズ

C# での依存性注入の説明

#依存関係とは、別のオブジェクトが依存するオブジェクトです。依存関係の注入 (または反転) は、基本的に、オブジェクト自体を構築させるのではなく、オブジェクトに必要なオブジェクトを提供することです。これは、依存関係を模擬できるため、テストを容易にする便利な手法です。

たとえば、クラス A がクラス B のメソッドを呼び出し、クラス B がクラス C のメソッドを呼び出す場合、A は B に依存し、B は C に依存することを意味します。依存関係注入を使用すると、これらのクラスに B と C のインスタンスを構築させる代わりに、クラス C のインスタンスをクラス B に渡し、B のインスタンスをクラス A に渡すことができます。

次の例では、クラス ランナーLogger クラスに依存します。 Logger のインスタンスは、Runner クラスのコンストラクターで作成されることに注意してください。このコードにはいくつかの問題があります。

  • これにより、ロガー クラスがランナーに関連付けられます。別のクラスに置き換えることはできません。 ランナーを改造する必要はありません。

  • Logger に依存関係がある場合は、Worker が最初に依存関係を構成する必要があります ロガーをインスタンス化します。

  • テストはさらに困難です。 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);
       }
    }
依存関係の注入を使用して、具象オブジェクトの代わりにインターフェイス ILogger を受け入れるように Runner のコンストラクターを変更します。 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。