Suntikan Ketergantungan Teras ASP.NET: Mengakses Perkhidmatan Di Luar IServiceCollection
Dalam Teras ASP.NET, IServiceCollection
adalah penting untuk mendaftarkan tanggungan dalam sistem suntikan tanggungan (DI). Walau bagaimanapun, situasi mungkin timbul di mana anda perlu menyelesaikan perkhidmatan secara terus, memintas suntikan standard.
Mengakses Perkhidmatan Terus daripada IServiceCollection
IServiceCollection
itu sendiri tidak menawarkan resolusi perkhidmatan; tujuannya adalah semata-mata untuk mengkonfigurasi bekas DI. Setelah dikonfigurasikan, bekas ini diubah menjadi IServiceProvider
.
Menyuntik Penyedia Perkhidmatan
Untuk resolusi perkhidmatan manual, masukkan IServiceProvider
ke dalam kelas anda. Kedua-dua IApplicationBuilder
dan HttpContext
menyediakan akses melalui hartanah ApplicationServices
dan RequestServices
mereka, masing-masing.
Menggunakan Penyedia Perkhidmatan
IServiceProvider
menawarkan GetService(Type type)
untuk mendapatkan semula perkhidmatan berdasarkan jenisnya. Untuk kemudahan, gunakan kaedah sambungan seperti GetService<TService>()
(memerlukan using Microsoft.Extensions.DependencyInjection;
).
Resolusi Perkhidmatan dalam Kelas Permulaan
Suntikan Kebergantungan dalam Permulaan
Kelas Startup
boleh menerima kebergantungan yang disuntik dalam pembinanya, seperti IConfiguration
dan IWebHostEnvironment
(atau IHostingEnvironment
dalam versi pra-3.0).
Dalam ConfigureServices()
, gunakan perkhidmatan yang disuntik ini untuk mendaftar tanggungan selanjutnya.
Resolusi Ketergantungan Manual dalam Permulaan
Untuk menyelesaikan perkhidmatan dalam ConfigureServices()
, buat perantaraan IServiceProvider
daripada IServiceCollection
. Ini membolehkan akses kepada perkhidmatan yang didaftarkan sehingga ketika itu.
Memanfaatkan Perkhidmatan Aplikasi
Dalam kaedah Configure()
, selesaikan perkhidmatan menggunakan IApplicationBuilder.ApplicationServices
. Ini mengakses perkhidmatan yang dikonfigurasikan untuk aplikasi.
Mengelakkan Anti-Corak Pencari Perkhidmatan
Penyelesaian perkhidmatan langsung biasanya tidak digalakkan kerana ia mewakili anti-corak "Pencari Perkhidmatan". Walaupun kadangkala perlu, ia harus dielakkan bila-bila masa yang sesuai untuk memihak kepada suntikan pembina.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Perkhidmatan dalam ASP.NET Core DI Beyond the IServiceCollection?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!