Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 20665|Svar: 0

[.NET Core] ASP.NET Core injicerar NullReferenceException med attributet Autofac

[Kopiera länk]
Publicerad den 2020-9-12 20:57:21 | | | |
Autofac är fantastiskt. NET IoC-behållare. Den hanterar beroendena mellan klasser, så att applikationen fortfarande enkelt kan modifieras när skalan och komplexiteten ökar. Den implementeras genom att behandla vanliga .NET-klasser som komponenter.
Jag är också en kliché när det gäller Autofac-behållare, och jag har skrivit många artiklar:

Använd autofac i MVC för att implementera automatisk registrering
https://www.itsvse.com/thread-8993-1-1.html

Autofac "Circular component dependency detected" felet löst
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core använder Autofac för att implementera IOC-injektion
https://www.itsvse.com/thread-7563-1-1.html

Instansomfattningen av autofac-komponenten
https://www.itsvse.com/thread-5080-1-1.html

mvc Controller Autofac-attributet injicerat i kontrollern
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core dependency injection använder IOC-containern som följer med
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core använder Autofac för att implementera IOC-injektion
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core använder Autofac för att implementera AOP-avlyssning
https://www.itsvse.com/thread-7566-1-1.html


Skapa ett nytt projekt ASP.NET Core 3.1 och referera autofac-relaterade paket via nuget, enligt följande:


Låt oss skapa ett nytt ITest-gränssnitt och implementation, koden är följande:




Skapa en ny BaseController-basklasskontroller, och andra kontroller ärver den abstrakta klassen, lägger till egenskapen ITest i basklassen, och koden är följande:

Låt WeatherForecastController ärva från BaseControllers abstrakta klass och lägga till följande testmetod:

ConfigureContainer-metoden i Startup-klassen registrerar gränssnittet och sätter kontrollattributets inmatning, koden är som följer:

Försök att besöka:Inloggningen med hyperlänken är synlig.

Undantaget NullReferenceException anges i det tomma meddelandet, som visas i följande figur:



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


PassKonstruktorn injiceras i ITest-gränssnittet, dess metod anropas, testet klaras och kan anropas normalt

Orsaker till avvikelser

Implementeringen av Controller är mer speciell, Controller löser och aktiverar inte som standard via sin egen container, den hanteras av MVC själv, men Microsoft tillhandahåller denna metod:

Du kan få Controllern att använda sin egen container genom att anropa AddControllersAsServices()-metoden, vars huvudkällkod är följande:



ConfigureServices-metoden i standardobjektet Startup är konfigurerad enligt följande:

Vi modifierar det till:

Eller:

Källkoden till ServiceBasedControllerActivator är följande:

När den är konfigurerad, ladda kontrollern direkt från DI-containern, kontrollern kommer att tolka tjänsten från Autofac, och den egenskapsinjektion vi konfigurerat träder i kraft. Som visas nedan:



Slutligen bifogas källkodsadressen till asp.net kärna:

Inloggningen med hyperlänken är synlig.

(Slut)





Föregående:Hangfire lägger till data som vanligt, men fortsätter att köras på grund av undantaget
Nästa:Hur visar man Sqlite-data i avancerade tabeller med E4A?
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com