|
|
Diposting pada 14/09/2018 13.22.21
|
|
|
|

Cakupan instans menentukan bagaimana layanan dibagikan antar permintaan.
Alamat asli:http://docs.autofac.org/en/latest/lifetime/instance-scope.html
Satu instans per dependensi
Dengan opsi ini, instans baru dikembalikan setiap kali layanan diminta. Gunakan InstancePerDependency(). Ini adalah opsi default. Kode di bawah ini, baris 2 dan 3 setara.
Kode berikut menghasilkan instans baru untuk setiap perulangan, dengan total 100 instans.
Instans tunggal
Gunakan opsi ini untuk meminta layanan di cakupan akar atau berlapis, keduanya mengembalikan instans yang sama. Gunakan SingleInstance() untuk menentukan.
Kode di bawah ini, w1 dan w2 selalu merupakan objek yang sama, dan hanya ada satu instance kelas Worker dalam 100 loop.
Satu instans per cakupan siklus hidup
Gunakan opsi ini untuk meminta layanan di ILifetimeScope tertentu, hanya mengembalikan satu instans. Gunakan InstancePerLifetimeScope(). Dalam kode berikut, 100 kali w1 di scope1 adalah objek yang sama, dan 100 kali w2 di scope2 adalah objek yang sama, tetapi w1 dan w2 bukanlah objek yang sama.
Satu instans per rentang siklus hidup yang cocok
Mirip dengan [satu instance per cakupan siklus hidup] di atas, tetapi dengan kontrol yang lebih besar. Gunakan opsi ini untuk mengizinkan objek ILifetimeScope disediakan dengan Tag. Hanya ada satu instance dalam rentang pencocokan tag. Gunakan metode InstancePerMatchingLifetimeScope().
Pada kode di bawah ini, w1 dan w2 sama, w3 dan w4 sama, tetapi w1 dan w3 berbeda.
Markup yang sesuai harus disediakan saat penguraian, dan kode berikut melemparkan pengecualian.
Satu instans per permintaan
Beberapa aplikasi secara alami memiliki semantik Permintaan, seperti aplikasi ASP.NET MVC atau WebForm. [Satu instans per permintaan] diimplementasikan berdasarkan [satu instans per rentang siklus hidup yang cocok], dengan menyediakan penanda cakupan, fungsi pendaftaran, dan integrasi jenis umum. Pada dasarnya, [satu instans per rentang siklus hidup yang cocok].
ASP.NET Core menggunakan satu instans per cakupan siklus hidup, bukan satu instans per permintaan.
Satu instance per Dimiliki
<T> Jenis asosiasi implisit Dimiliki membuat rentang siklus hidup bertingkat. Dengan pendaftaran instans per dimiliki, Anda dapat membatasi dependensi ke instans yang dimiliki.
Dalam hal ini, layanan ServiceForHandler terbatas pada cakupan instans MessageHandler.
Rentang benang
Autofac dapat memaksa objek utas A untuk tidak memenuhi dependensi utas B.
Kemudian biarkan masing-masing membuat cakupan masa hidupnya sendiri
Penting: Dalam skenario multithread, berhati-hatilah untuk tidak membersihkan cakupan induk.Jika tidak, subcakupan dalam utas turunan tidak akan dapat menyelesaikan layanan.
Setiap utas akan memiliki instans MyThreadScopedComponent sendiri, yang pada dasarnya adalah singleton cakupan siklus hidup. Instans dalam cakupan tidak disediakan secara eksternal, sehingga mudah untuk menjaga komponen tetap terisolasi di antara utas.
Dengan menambahkan parameter ILifetimeScope, rentang induk dapat disuntikkan ke dalam kode yang menghasilkan utas, dan Autofac akan secara otomatis menyuntikkan rentang saat ini, yang kemudian dapat digunakan untuk membuat cakupan berlapis.
Jika Anda ingin mengontrolnya lebih lanjut, Anda dapat menggunakan [satu instans per rentang siklus hidup yang cocok] untuk mengaitkan komponen cakupan utas dengan cakupan siklus hidup internal, seperti yang ditunjukkan pada gambar:
"Konteks" dalam diagram adalah rentang siklus hidup yang dibuat oleh metode BeginLifetimeScope.
|
Mantan:Efek klik mouse front-end: kebebasan, demokrasi, kemakmuranDepan:{"error_msg": "Sertifikasi IAM gagal"}
|