|
|
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:
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ührtNächster:Wie kann man Sqlite-Daten in erweiterten Tabellen mit E4A anzeigen?
|