C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#での依存性注入について説明する


依存関係は、別のオブジェクトが依存するオブジェクトです。依存性注入(または反転)は、基本的に、オブジェクト自体を構築するのではなく、オブジェクトが必要とするオブジェクトを提供します。依存関係をモックできるので、テストを簡単にする便利なテクニックです。

たとえば、クラスAがクラスBのメソッドを呼び出し、次にクラスCのメソッドを呼び出す場合、つまり、AはBに依存し、BはCに依存します。依存性注入を使用して、クラスCのインスタンスをクラスBに渡すことができます。 、およびBとCのインスタンスを構築するためにこれらのクラスを持つ代わりに、BのインスタンスをクラスAに渡します。

以下の例では、クラス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);
   }
}

依存性注入を使用して、具体的なオブジェクトではなく、インターフェイス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

  1. C#でクラスの概念を説明する

    クラスは、C#の必須タイプの1つです。クラスは、問題のドメインに関連するオブジェクトの青写真と考えることができます。これは、オブジェクトを作成するためのテンプレートであり、このクラスから作成されたオブジェクトのセットによって共有される構造と動作を定義します。簡単に言うと、クラスはCookieカッターであり、オブジェクトはCookie自体です。 クラスは、オブジェクト指向プログラミングの重要な概念であるカプセル化も可能にします。これは、データとデータを処理する操作を1か所で組み合わせ、そのオブジェクトのユーザーにシンプルなAPIを提供することを意味します。クラスを使用すると、データをカプセル化

  2. C#のコンソールクラス

    C#のConsoleクラスは、コンソールアプリケーションの標準の入力、出力、およびエラーストリームを表すために使用されます。 C#のコンソールクラスプロパティの例をいくつか見てみましょう- Console.CursorLeftプロパティ C#でコンソールのCursorLeftを変更するには、Console.CursorLeftプロパティを使用します。 例 例を見てみましょう- using System; class Demo {    public static void Main (string[] args) {       Cons