Rumah > Artikel > pembangunan bahagian belakang > Suntikan ketergantungan dalam C# dijelaskan
Kebergantungan ialah objek yang bergantung kepada objek lain. Suntikan ketergantungan (atau penyongsangan) pada asasnya menyediakan objek dengan objek yang diperlukan dan bukannya membiarkannya membina objek itu sendiri. Ini ialah teknik berguna yang menjadikan ujian lebih mudah kerana ia membolehkan anda mengejek kebergantungan.
Sebagai contoh, jika kelas A memanggil kaedah pada kelas B, dan kelas B memanggil kaedah pada kelas C, ini bermakna A bergantung kepada B dan B bergantung kepada C. Menggunakan suntikan kebergantungan, kita boleh menghantar contoh kelas C ke kelas B, dan contoh B ke kelas A, bukannya meminta kelas ini membina tika B dan C.
Dalam contoh di bawah, Runner kelas bergantung pada Logger Kelas . Ambil perhatian bahawa contoh Logger dicipta dalam pembina kelas Runner. Terdapat beberapa masalah dengan kod ini.
Ini mengikat kelas logger dengan Runner, kita tidak boleh menggantikannya dengan kelas lain, Tidak perlu mengubah suai Runner.
Jika Logger mempunyai sebarang kebergantungan, maka Pekerja mesti mengkonfigurasinya terlebih dahulu Segerakan Logger.
Ujian itu lebih sukar. Jika Logger ialah kelas intensif sumber, seperti akses rangkaian atau sistem fail, ia boleh melambatkan ujian. Kita tidak boleh menggantikannya dengan mudah.
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); } }
Menggunakan suntikan kebergantungan, kami mengubah suai pembina Runner untuk menerima antara muka ILogger dan bukannya objek konkrit. Kami menukar kelas Logger untuk melaksanakan ILogger. Ini membolehkan kita menghantar contoh kelas Logger kepada pembina Runner. Kelebihan ini ialah semasa ujian kita boleh mencipta kelas TestLogger yang melaksanakan ILogger dan menyerahkannya kepada pembina Runner.
Demonstrasi masa nyata
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
Atas ialah kandungan terperinci Suntikan ketergantungan dalam C# dijelaskan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!