Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 20665|Antwort: 0

[.NET Core] ASP.NET Core injiziert NullReferenceException mit dem Autofac-Attribut

[Link kopieren]
Veröffentlicht am 12.9.2020, 20:57:21 | | | |
Autofac ist großartig. NET IoC-Container. Es verwaltet die Abhängigkeiten zwischen Klassen, sodass die Anwendung weiterhin leicht verändert werden kann, wenn Skalierung und Komplexität zunehmen. Es wird implementiert, indem reguläre .NET-Klassen als Komponenten behandelt werden.
Ich bin auch ein Klischee, was Autofac-Behälter angeht, und ich habe viele Artikel geschrieben:

Verwenden Sie Autofac in MVC, um die automatische Registrierung zu implementieren
https://www.itsvse.com/thread-8993-1-1.html

Autofac-Fehler "Circular component dependency detected" behoben
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core verwendet Autofac, um IOC-Injektionen zu implementieren
https://www.itsvse.com/thread-7563-1-1.html

Der Instanzumfang der Autofac-Komponente
https://www.itsvse.com/thread-5080-1-1.html

mvc Controller Autofac-Attribut in den Controller injiziert
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core Dependency Injection verwendet den mitgelieferten IOC-Container
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core verwendet Autofac, um IOC-Injektionen zu implementieren
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core verwendet Autofac, um AOP-Abfang zu implementieren
https://www.itsvse.com/thread-7566-1-1.html


Erstellen Sie ein neues Projekt ASP.NET Core 3.1 und referenzen Sie autofac-bezogene Pakete über nuget wie folgt:


Lassen Sie uns eine neue ITest-Schnittstelle und Implementierung erstellen, der Code ist wie folgt:




Erstellen Sie einen neuen BaseController-Basisklassencontroller, und andere Controller übernehmen die abstrakte Klasse, fügen die ITest-Eigenschaft zur Basisklasse hinzu, und der Code ist wie folgt:

Lass den WeatherForecastController von der abstrakten BaseController-Klasse erben und fügt folgende Testmethode hinzu:

Die Methode ConfigureContainer in der Startup-Klasse registriert die Schnittstelle und setzt die Eingabe des Controller-Attributs; der Code ist wie folgt:

Versuchen Sie, Folgendes zu besuchen:Der Hyperlink-Login ist sichtbar.

Die NullReferenceException-Ausnahme wird in der leeren Nachricht zitiert, wie in der folgenden Abbildung dargestellt:



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


BestehenDer Konstruktor wird in die ITest-Schnittstelle eingeschleust, seine Methode wird aufgerufen, der Test besteht und er kann normal aufgerufen werden

Ursachen von Anomalien

Die Implementierung des Controllers ist spezieller: Der Controller löst und aktiviert standardmäßig nicht über einen eigenen Container, sondern wird von MVC selbst verwaltet, aber Microsoft bietet diese Methode an:

Sie können den Controller dazu bringen, seinen eigenen Container zu verwenden, indem Sie die AddControllersAsServices()-Methode aufrufen, deren Hauptquellcode wie folgt ist:



Die ConfigureServices-Methode im Standard-Startobjekt ist wie folgt konfiguriert:

Wir passen sie an folgendermaßen:

Oder:

Der Quellcode von ServiceBasedControllerActivator ist wie folgt:

Nach der Konfiguration lädt man den Controller direkt aus dem DI-Container, der Controller parst den Dienst aus Autofac, und die konfigurierte Property Injection tritt in Kraft. Wie unten gezeigt:



Abschließend wird die Quellcodeadresse asp.net Kerns angehängt:

Der Hyperlink-Login ist sichtbar.

(Ende)





Vorhergehend:Hangfire fügt die Daten normal hinzu, wird aber wegen der Ausnahme weiterhin ausgeführt
Nächster:Wie kann man Sqlite-Daten in erweiterten Tabellen mit E4A anzeigen?
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com