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:
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)
|