Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 20665|Jawab: 0

[Inti .NET] ASP.NET Core menyuntikkan NullReferenceException dengan atribut Autofac

[Salin tautan]
Dipaparkan pada 2020-9-12 20:57:21 | | | |
Autofac sangat mengagumkan. Kontainer NET IoC. Ini mengelola dependensi antar kelas, sehingga aplikasi masih dapat dengan mudah dimodifikasi seiring dengan meningkatnya skala dan kompleksitas. Ini diimplementasikan dengan memperlakukan kelas .NET reguler sebagai komponen.
Saya juga klise tentang wadah Autofac, dan saya telah menulis banyak artikel:

Menggunakan autofac di MVC untuk menerapkan pendaftaran otomatis
https://www.itsvse.com/thread-8993-1-1.html

Kesalahan Autofac "Dependensi komponen melingkar terdeteksi" diselesaikan
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core menggunakan Autofac untuk mengimplementasikan injeksi IOC
https://www.itsvse.com/thread-7563-1-1.html

Cakupan instance komponen autofac
https://www.itsvse.com/thread-5080-1-1.html

Atribut Autofac Pengontrol mvc disuntikkan ke dalam pengontrol
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Injeksi dependensi inti menggunakan kontainer IOC yang menyertainya
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core menggunakan Autofac untuk mengimplementasikan injeksi IOC
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core menggunakan Autofac untuk mengimplementasikan intersepsi AOP
https://www.itsvse.com/thread-7566-1-1.html


Buat proyek baru ASP.NET Core 3.1 dan referensikan paket terkait autofac melalui nuget, sebagai berikut:


Mari kita buat antarmuka dan implementasi ITest baru, kodenya adalah sebagai berikut:




Buat pengontrol kelas dasar BaseController baru, dan pengontrol lain mewarisi kelas abstrak, tambahkan properti ITest ke kelas dasar, dan kodenya adalah sebagai berikut:

Biarkan WeatherForecastController mewarisi dari kelas abstrak BaseController, menambahkan metode pengujian berikut:

Metode ConfigureContainer di kelas Startup mendaftarkan antarmuka dan mengatur input atribut pengontrol, kodenya adalah sebagai berikut:

Cobalah untuk mengunjungi:Login hyperlink terlihat.

Pengecualian NullReferenceException dikutip dalam pesan kosong, seperti yang ditunjukkan pada gambar berikut:



NullReferenceException: Object reference not set to an instance of an object.


LulusKonstruktor disuntikkan ke antarmuka ITest, metodenya dipanggil, pengujian lulus, dan dapat dipanggil secara normal

Penyebab anomali

Implementasi Pengontrol lebih istimewa, Pengontrol tidak Menyelesaikan & Aktifkan secara default melalui kontainernya sendiri, dikelola oleh MVC sendiri, tetapi Microsoft menyediakan metode ini:

Anda dapat membuat Pengontrol menggunakan kontainernya sendiri dengan memanggil metode AddControllersAsServices(), kode sumber utamanya adalah sebagai berikut:



Metode ConfigureServices dalam objek Startup default dikonfigurasi sebagai berikut:

Kami memodifikasinya menjadi:

Atau:

Kode sumber ServiceBasedControllerActivator adalah sebagai berikut:

Setelah dikonfigurasi, muat pengontrol langsung dari kontainer DI, pengontrol akan mengurai layanan dari Autofac, dan injeksi properti yang kami konfigurasikan akan diterapkan. Seperti yang ditunjukkan di bawah ini:



Terakhir, alamat kode sumber inti asp.net dilampirkan:

Login hyperlink terlihat.

(Akhir)





Mantan:Hangfire menambahkan data secara normal, tetapi terus dijalankan karena pengecualian
Depan:Bagaimana cara menampilkan data Sqlite dalam tabel lanjutan dengan E4A?
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com