Autofac er fantastisk. NET IoC-containere. Den håndterer afhængighederne mellem klasser, så applikationen stadig nemt kan ændres, efterhånden som skalaen og kompleksiteten øges. Det implementeres ved at behandle almindelige .NET-klasser som komponenter. Jeg er også en kliché omkring Autofac-beholdere, og jeg har skrevet mange artikler:
Opret et nyt projekt ASP.NET Core 3.1 og referer til autofac-relaterede pakker via nuget som følger:
Lad os lave en ny ITest-grænseflade og implementering, koden er som følger:
Opret en ny BaseController-baseklasse-controller, og andre controllere arver den abstrakte klasse, tilføjer ITest-egenskaben til baseklassen, og koden er som følger:
Lad WeatherForecastController arve fra BaseController-abstraktklassen og tilføje følgende testmetode:
ConfigureContainer-metoden i Startup-klassen registrerer interfacet og sætter controller-attributinputtet, koden er som følger:
Prøv at besøge:Hyperlink-login er synlig.
NullReferenceException-undtagelsen er citeret i den tomme besked, som vist i følgende figur:
NullReferenceException: Object reference not set to an instance of an object.
PasKonstruktøren injiceres i ITest-grænsefladen, dens metode kaldes, testen består, og den kan kaldes normalt。
Årsager til anomalier
Implementeringen af Controlleren er mere speciel; Controlleren løser og aktiverer ikke som standard gennem sin egen container, den administreres af MVC selv, men Microsoft tilbyder denne metode:
Du kan få controlleren til at bruge sin egen container ved at kalde AddControllersAsServices()-metoden, hvis hovedkildekode er som følger:
ConfigureServices-metoden i standardobjektet Startup er konfigureret som følger:
Vi ændrer det til:
Eller:
Kildekoden til ServiceBasedControllerActivator er som følger:
Når den er konfigureret, indlæs controlleren direkte fra DI-containeren, controlleren vil parse tjenesten fra Autofac, og den egenskabsindsprøjtning, vi konfigurerede, træder i kraft. Som vist nedenfor:
Endelig vedhæftes kildekodeadressen til asp.net kerne:
Hyperlink-login er synlig.
(Slut)
|