Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 20665|Răspunde: 0

[.NET Core] ASP.NET Core injectează NullReferenceException cu atributul Autofac

[Copiază linkul]
Postat pe 2020-9-12 20:57:21 | | | |
Autofac este grozav. NET IoC. Gestionează dependențele dintre clase, astfel încât aplicația să poată fi totuși ușor modificată pe măsură ce scala și complexitatea cresc. Este implementat prin tratarea claselor .NET obișnuite ca componente.
Sunt și un clișeu în privința containerelor Autofac și am scris multe articole:

Folosiți autofac în MVC pentru a implementa înregistrarea automată
https://www.itsvse.com/thread-8993-1-1.html

Autofac "Eroare de dependență circulară detectată" rezolvată
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core folosește Autofac pentru a implementa injectarea IOC
https://www.itsvse.com/thread-7563-1-1.html

Domeniul instanței componentei autofac
https://www.itsvse.com/thread-5080-1-1.html

Mvc Controller Autofac atribut injectat în controller
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core dependency injection folosește containerul IOC care vine cu ea
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core folosește Autofac pentru a implementa injectarea IOC
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core folosește Autofac pentru a implementa interceptarea AOP
https://www.itsvse.com/thread-7566-1-1.html


Creează un proiect nou ASP.NET Core 3.1 și referinează pachetele legate de autofac prin nuget, după cum urmează:


Să creăm o nouă interfață și implementare ITest, codul este următorul:




Creează un nou controler de clasă de bază BaseControler, iar ceilalți controleri moștenesc clasa abstractă, adaugă proprietatea ITest la clasa de bază, iar codul este următorul:

Lăsăm WeatherForecastController să moștenească din clasa abstractă BaseControler, adăugând următoarea metodă de testare:

Metoda ConfigureContainer din clasa Startup înregistrează interfața și setează intrarea atributului controlerului, codul fiind următorul:

Încearcă să vizitezi:Autentificarea cu hyperlink este vizibilă.

Excepția NullReferenceException este citată în mesajul gol, așa cum se arată în figura următoare:



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


TrecereaConstructorul este injectat în interfața ITest, metoda sa este apelată, testul trece și poate fi apelat normal

Cauzele anomaliilor

Implementarea Controller-ului este mai specială, Controller-ul nu rezolvă și activează implicit prin propriul său container, este gestionat chiar de MVC, dar Microsoft oferă această metodă:

Poți face ca Controlerul să folosească propriul container apelând metoda AddControllersAsServices(), al cărei cod sursă principal este următorul:



Metoda ConfigureServices din obiectul implicit Startup este configurată astfel:

Îl modificăm pentru:

Sau:

Codul sursă ServiceBasedControllerActivator este următorul:

Odată configurat, încarcă controlerul direct din containerul DI, controlerul va analiza serviciul din Autofac, iar injecția de proprietăți configurată va intra în vigoare. Așa cum se arată mai jos:



În final, adresa codului sursă a nucleului asp.net este atașată:

Autentificarea cu hyperlink este vizibilă.

(Sfârșit)





Precedent:Hangfire adaugă date în mod normal, dar continuă să ruleze din cauza excepției
Următor:Cum să afișezi datele Sqlite în tabele avansate cu E4A?
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com