Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Layanan dapat didaftarkan dengan masa pakai transien, scoped, atau singleton. Pilih masa pakai yang sesuai untuk setiap layanan terdaftar.
Transient
Layanan dengan masa pakai sementara dibuat setiap kali diminta dari kontainer layanan. Untuk mendaftarkan layanan sebagai sementara, panggil AddTransient.
Di aplikasi yang memproses permintaan, layanan sementara dibuang di akhir permintaan. Masa pakai ini menimbulkan alokasi per permintaan, karena layanan diselesaikan dan dibangun setiap saat. Untuk informasi selengkapnya, lihat panduan IDisposable untuk instans sementara dan berbagi.
Dibatasi
Untuk aplikasi web, masa pakai terlingkup menunjukkan bahwa layanan dibuat sekali per permintaan klien (koneksi). Di aplikasi yang memproses permintaan, layanan dengan ruang lingkup dihapus di akhir permintaan. Daftarkan layanan berlingkup dengan memanggil AddScoped.
Nota
Saat menggunakan Entity Framework Core, AddDbContext metode ekstensi mendaftarkan DbContext jenis dengan masa pakai terlingkup secara default.
Layanan terlingkup harus selalu digunakan dari dalam cakupan–baik cakupan implisit (seperti lingkup per permintaan ASP.NET Core) atau cakupan eksplisit yang dibuat dengan IServiceScopeFactory.CreateScope().
Jangan menyelesaikan layanan terlingkup langsung dari singleton menggunakan injeksi konstruktor atau dengan memintanya dari IServiceProvider dalam singleton. Melakukan hal tersebut menyebabkan layanan yang dibatasi cakupannya bertindak seperti singleton, yang dapat menyebabkan keadaan yang tidak benar saat memproses permintaan berikutnya.
Dapat diterima untuk menyelesaikan layanan dengan lingkup di dalam singleton jika Anda membuat dan menggunakan cakupan eksplisit dengan IServiceScopeFactory.
Hal ini juga baik-baik saja untuk:
- Atasi layanan singleton dari layanan terlingkup atau sementara.
- Memproses layanan berskala dari layanan berskala lainnya atau layanan sementara.
Secara default, di lingkungan pengembangan, menyelesaikan layanan dari layanan lain dengan masa pakai yang lebih lama memberikan pengecualian. Untuk informasi selengkapnya, lihat Validasi Cakupan.
Singleton
Layanan seumur hidup Singleton dapat dibuat dengan cara:
- Pertama kali mereka diminta.
- Dikerjakan oleh pengembang, saat memberikan instance implementasi secara langsung ke kontainer. Pendekatan ini jarang diperlukan.
Setiap permintaan implementasi layanan berikutnya dari kontainer injeksi dependensi menggunakan instans yang sama. Jika aplikasi memerlukan perilaku singleton, izinkan kontainer layanan untuk mengelola masa pakai layanan. Jangan terapkan pola desain singleton dan berikan kode untuk membuang singleton. Layanan tidak boleh dibuang oleh kode yang menyelesaikan layanan dari kontainer. Jika jenis atau pabrik terdaftar sebagai singleton, kontainer akan membuang singleton secara otomatis.
Daftarkan layanan singleton dengan AddSingleton. Layanan singleton harus aman-utas dan sering digunakan dalam layanan yang tidak memiliki status.
Dalam aplikasi yang memproses permintaan, layanan singleton dihapus saat ServiceProvider dihentikan saat pemadaman aplikasi. Karena memori tidak dibebaskan sampai aplikasi dihentikan, pertimbangkan penggunaan memori dengan layanan singleton.