Di ASP.NET Core baru, sejumlah besar injeksi dependensi digunakan untuk menulis kode.
Misalnya, di kelas Startup kita, kita dapat melihat hal berikut:
AddMvc AddDbContext menyertakan AddDirectoryBrowser yang kami gunakan untuk tur direktori sebelumnya:
Semuanya adalah kerangka kerja yang memberikan layanan yang baik, dan kita dapat menggunakannya secara langsung dengan menyuntikkannya.
Inversion of Control (IoC) adalah prinsip desain dalam pemrograman berorientasi objek yang dapat digunakan untuk mengurangi kopling antar kode komputer. Metode yang paling umum disebut Injeksi Dependensi (DI), dan ada juga metode yang disebut "Pencarian Dependensi". Dengan mengontrol inversi, ketika objek dibuat, entitas eksternal yang mengontrol semua objek dalam sistem meneruskannya referensi ke objek yang bergantung padanya. Dapat juga dikatakan bahwa dependensi disuntikkan ke dalam objek. Untuk menggunakan ioc, kelas Startup perlu mereferensikan Microsoft.Extensions.DependencyInjection(ps, yang sudah cukup mudah: Microsoft.. Memperluas... Injeksi ketergantungan - - ,)
Menyuntikkan siklus hidup layanan
Microsoft menyediakan 3 siklus hidup untuk layanan yang disuntikkan sendiri.
Sementara
Layanan siklus hidup instan yang dibuat setiap kali diminta. Siklus hidup ini paling cocok untuk layanan tanpa kewarganegaraan yang ringan.
Tercakup
Dalam cakupan yang sama, layanan dibuat hanya sekali per permintaan.
Singleton (Hanya)
Global hanya dibuat sekali, pertama kali diminta, dan kemudian selalu digunakan.
Bagaimana Anda menggunakan ketiga siklus hidup ini? Kita dapat menggunakan metode yang berbeda secara langsung saat menyuntikkan, kodenya adalah sebagai berikut:
Mari kita uji generasi spesifik dari ketiga siklus hidup ini
Kami menulis tiga antarmuka dengan nama berbeda dan 3 kelas berbeda untuk mengimplementasikan antarmuka, sebagai berikut:
Di setiap konstruktor kelas implementasi, kami menghasilkan GUID baru, yang memungkinkan kami untuk menentukan apakah kelas telah mengeksekusi ulang konstruktor.
Menyuntikkan layanan ke pengontrol
Umumnya ada tiga cara injeksi: injeksi konstruktor, injeksi metode, dan injeksi atribut. Kontainer IOC Microsoft sendiri menggunakan injeksi konstruktor secara default (Injeksi atribut tidak didukung, tetapi dapat dicapai dengan penggantian kontainer pihak ketiga)
Lihat kode halaman:
Jalankan proyek dan akses melalui 2 browser berbeda, seperti yang ditunjukkan di bawah ini:
Kami menemukan bahwa GUID yang dihasilkan dua kali dalam siklus hidup seketika tidak konsisten, menunjukkan bahwa objek tersebut tidak sama.
Namun, siklus hidup cakupannya sama, karena di bawah cakupan yang sama, GUID layanan yang digunakan dua kali di browser yang sama adalah sama, menunjukkan bahwa objek yang sama digunakan.
Dalam kasus singleton, dua browser yang berbeda mengakses GUID yang selalu sama, menunjukkan bahwa objek yang sama sedang dipanggil.
(Akhir)
|