Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 20665|Odgovoriti: 0

[.NET Core] ASP.NET Core vbrizga NullReferenceException z atributom Autofac

[Kopiraj povezavo]
Objavljeno 12. 9. 2020 20:57:21 | | | |
Autofac je odličen. NET IoC kontejnerji. Upravlja odvisnosti med razredi, tako da je aplikacijo še vedno mogoče enostavno spreminjati, ko se obseg in kompleksnost povečujeta. Implementiran je tako, da se običajni .NET razredi obravnavajo kot komponente.
Sem tudi kliše glede posodic Autofac in napisal sem veliko člankov:

Uporabite autofac v MVC za implementacijo samodejne registracije
https://www.itsvse.com/thread-8993-1-1.html

Autofac "Zaznana krožna odvisnost komponente" napaka rešena
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core uporablja Autofac za implementacijo vbrizgavanja IOC
https://www.itsvse.com/thread-7563-1-1.html

Obseg instance komponente autofac
https://www.itsvse.com/thread-5080-1-1.html

atribut mvc krmilnika Autofac, vbrizgan v krmilnik
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core dependency injection uporablja IOC vsebnik, ki je priložen
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core uporablja Autofac za implementacijo vbrizgavanja IOC
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core uporablja Autofac za implementacijo prestrezanja AOP
https://www.itsvse.com/thread-7566-1-1.html


Ustvarite nov projekt ASP.NET Core 3.1 in preko Nugeta referencirajte pakete, povezane z Autofac, kot sledi:


Ustvarimo nov ITest vmesnik in implementacijo, koda je naslednja:




Ustvarite nov osnovni krmilnik razreda BaseController, drugi krmilniki podedujejo abstraktni razred, dodajo lastnost ITest osnovnemu razredu in koda je naslednja:

Naj WeatherForecastController podeduje abstraktni razred BaseController in doda naslednjo testno metodo:

Metoda ConfigureContainer v razredu Startup registrira vmesnik in nastavi vhodni atribut kontrolerja, koda je naslednja:

Poskusite obiskati:Prijava do hiperpovezave je vidna.

NullReferenceException je naveden v praznem sporočilu, kot je prikazano na naslednji sliki:



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


PrehodKonstruktor se vbrizga v ITest vmesnik, njegova metoda se pokliče, test opravi in ga lahko normalno pokličemo

Vzroki anomalij

Implementacija krmilnika je bolj posebna, krmilnik privzeto ne resolve&activate preko svojega kontejnerja, temveč ga upravlja sam MVC, vendar Microsoft ponuja to metodo:

Kontroler lahko uporabi svoj lasten vsebnik z metodo AddControllersAsServices(), katere glavna izvorna koda je naslednja:



Metoda ConfigureServices v privzetem objektu Startup je konfigurirana takole:

Spremenimo ga v:

Ali:

Izvorna koda ServiceBasedControllerActivator je naslednja:

Ko je nastavljen, naložimo krmilnik neposredno iz DI kontejnerja, krmilnik bo razčlenil storitev iz Autofac, in vbrizgavanje lastnosti, ki smo ga konfigurirali, bo začelo veljati. Kot je prikazano spodaj:



Na koncu je priložen naslov izvorne kode asp.net jedra:

Prijava do hiperpovezave je vidna.

(Konec)





Prejšnji:Hangfire običajno dodaja podatke, vendar se zaradi izjeme še naprej izvaja
Naslednji:Kako prikazati podatke Sqlite v naprednih tabelah z E4A?
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com