Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 20665|Svare: 0

[.NET Core] ASP.NET Core injiserer NullReferenceException med Autofac-attributtet

[Kopier lenke]
Publisert 2020-9-12 20:57:21 | | | |
Autofac er fantastisk. NET IoC-beholdere. Den håndterer avhengighetene mellom klasser, slik at applikasjonen fortsatt enkelt kan endres etter hvert som skala og kompleksitet øker. Den implementeres ved å behandle vanlige .NET-klasser som komponenter.
Jeg er også en klisjé når det gjelder Autofac-beholdere, og jeg har skrevet mange artikler:

Bruk autofac i MVC for å implementere automatisk registrering
https://www.itsvse.com/thread-8993-1-1.html

Autofac "Sirkulær komponentavhengighet oppdaget" feil løst
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core bruker Autofac for å implementere IOC-injeksjon
https://www.itsvse.com/thread-7563-1-1.html

Instansomfanget til autofac-komponenten
https://www.itsvse.com/thread-5080-1-1.html

mvc Controller Autofac-attributt injisert i kontrolleren
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core-avhengighetsinjeksjon bruker IOC-beholderen som følger med
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core bruker Autofac for å implementere IOC-injeksjon
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core bruker Autofac for å implementere AOP-avskjæring
https://www.itsvse.com/thread-7566-1-1.html


Opprett et nytt prosjekt ASP.NET Core 3.1 og referer til autofac-relaterte pakker gjennom nuget, som følger:


La oss lage et nytt ITest-grensesnitt og implementering, koden er som følger:




Opprett en ny BaseController-baseklassekontroller, og andre kontrollere arver den abstrakte klassen, legg til ITest-egenskapen til baseklassen, og koden er som følger:

La WeatherForecastController arve fra BaseController-abstraktklassen, og legge til følgende testmetode:

ConfigureContainer-metoden i Startup-klassen registrerer grensesnittet og setter kontrollerattributtinndata, koden er som følger:

Prøv å besøke:Innloggingen med hyperkoblingen er synlig.

NullReferenceException-unntaket er sitert i den tomme meldingen, som vist i følgende figur:



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


PassKonstruktøren injiseres i ITest-grensesnittet, metoden kalles opp, testen består, og den kan kalles normalt

Årsaker til avvik

Implementeringen av kontrolleren er mer spesiell, kontrolleren løser og aktiverer ikke som standard gjennom sin egen container, den administreres av MVC selv, men Microsoft tilbyr denne metoden:

Du kan få kontrolleren til å bruke sin egen beholder ved å kalle AddControllersAsServices()-metoden, hvor hovedkildekoden er som følger:



ConfigureServices-metoden i standard Startup-objektet er konfigurert som følger:

Vi endrer det til:

Eller:

Kildekoden til ServiceBasedControllerActivator er som følger:

Når den er konfigurert, last kontrolleren direkte fra DI-containeren, kontrolleren vil analysere tjenesten fra Autofac, og egenskapsinjeksjonen vi har konfigurert trer i kraft. Som vist nedenfor:



Til slutt er kildekoden til kjernen asp.net vedlagt:

Innloggingen med hyperkoblingen er synlig.

(Slutt)





Foregående:Hangfire legger til data normalt, men fortsetter å kjøre på grunn av unntaket
Neste:Hvordan vise Sqlite-data i avanserte tabeller med E4A?
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com