|
|
Geplaatst op 2020-9-12 20:57:21
|
|
|
|

Autofac is geweldig. NET IoC-containers. Het beheert de afhankelijkheden tussen klassen, zodat de applicatie nog steeds eenvoudig kan worden aangepast naarmate de schaal en complexiteit toenemen. Het wordt geïmplementeerd door reguliere .NET-klassen als componenten te behandelen. Ik ben ook een cliché over Autofac-containers, en ik heb veel artikelen geschreven:
Maak een nieuw project aan ASP.NET Core 3.1 en verwijs naar autofac-gerelateerde pakketten via nuget, als volgt:
Laten we een nieuwe ITest-interface en implementatie maken, de code is als volgt:
Maak een nieuwe BaseController-basisclasscontroller aan, andere controllers erven de abstracte klasse, voegen de ITest-eigenschap toe aan de basisklasse, en de code is als volgt:
Laat de WeatherForecastController erven van de abstracte klasse BaseController, met de volgende testmethode:
De ConfigureContainer-methode in de Startup-klasse registreert de interface en stelt de invoer van het controllerattribuut in; de code is als volgt:
Probeer te bezoeken:De hyperlink-login is zichtbaar.
De uitzondering NullReferenceException wordt geciteerd in het blanco bericht, zoals weergegeven in de volgende figuur:
NullReferenceException: Object reference not set to an instance of an object.
PasDe constructor wordt geïnjecteerd in de ITest-interface, zijn methode wordt aangeroepen, de test slaagt en kan normaal worden aangeroepen。
Oorzaken van anomalieën
De implementatie van de Controller is specialer, de Controller resolve&Activate standaard niet via een eigen container, hij wordt beheerd door MVC zelf, maar Microsoft biedt deze methode aan:
Je kunt de Controller zijn eigen container laten gebruiken door de AddControllersAsServices()-methode aan te roepen, waarvan de hoofdbroncode als volgt is:
De ConfigureServices-methode in het standaard Startup-object is als volgt geconfigureerd:
We passen het aan naar:
Of:
De broncode van ServiceBasedControllerActivator is als volgt:
Eenmaal geconfigureerd, laad je de controller direct vanuit de DI-container, de controller zal de service van Autofac parsen en de property injection die we hebben geconfigureerd wordt uitgevoerd. Zoals hieronder getoond:
Ten slotte wordt het broncodeadres van asp.net kern toegevoegd:
De hyperlink-login is zichtbaar.
(Einde)
|
Vorig:Hangfire voegt normaal data toe, maar blijft uitvoeren vanwege de uitzonderingVolgend:Hoe kun je Sqlite-gegevens weergeven in geavanceerde tabellen met E4A?
|