|
|
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:
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 undantagetNästa:Hur visar man Sqlite-data i avancerade tabeller med E4A?
|