Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 20665|Válasz: 0

[.NET mag] ASP.NET Core a NullReferenceException-ba az Autofac attribútumot injektálja

[Linket másol]
Közzétéve: 2020-9-12 20:57:21 | | | |
Az Autofac egy fantasztikus. NET IoC konténerek. Kezeli az osztályok közötti függőségeket, így az alkalmazás továbbra is könnyen módosítható a méretarány és a komplexitás növekedésével. Úgy valósítják meg, hogy a normál .NET osztályokat komponensként kezelik.
Én is közhelyes vagyok az Autofac konténerekkel kapcsolatban, és sok cikket írtam:

Használd az autofac-t az MVC-ben az automatikus regisztráció megvalósításához
https://www.itsvse.com/thread-8993-1-1.html

Autofac "Körkörös komponensfüggőség észlelve" hiba megoldva
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core Autofac-ot használ az IOC injekció megvalósításához
https://www.itsvse.com/thread-7563-1-1.html

Az autofac komponens instance scope-ja
https://www.itsvse.com/thread-5080-1-1.html

mvc Controller Autofac attribútuma injektálva a vezérlőbe
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET A magfüggőségi injekció a hozzá tartozó IOC konténert használja
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core Autofac-ot használ az IOC injekció megvalósításához
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core Autofac-ot használ az AOP elfogás megvalósításához
https://www.itsvse.com/thread-7566-1-1.html


Hozz létre egy új projektet a Core 3.1 ASP.NET és hivatkozz autofac-hoz kapcsolódó csomagokra a nuget-en keresztül, az alábbiak szerint:


Hozzunk létre egy új ITest interfészt és megvalósítást, a kód a következő:




Létrehozz egy új BaseController alaposztály-vezérlőt, és más vezérlők öröklik az absztrakt osztályt, hozzáadjuk az ITest tulajdonságot az alaposztályhoz, és a kód a következő:

Hagyjuk, hogy a WeatherForecastController örököljön a BaseController absztrakt osztályból, hozzáadva a következő tesztmódszert:

A Startup osztályban a ConfigureContainer metódus regisztrálja az interfészt és beállítja a vezérlő attribútumbemenetet, a kód a következő:

Próbálj meg meglátogatni:A hiperlink bejelentkezés látható.

A nullReferenceException kivétel az üres üzenetben szerepel, ahogy az alábbi ábrán látható:



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


PassA konstruktor bekerül az ITest interfészbe, a módszerét hívják, a teszt átmegy, és normálisan is hívható

Az anomáliák okai

A Controller megvalósítása különlegesebb, a Controller nem oldanva a saját konténerén keresztül működik a Resolve&Activate funkcióval, hanem maga az MVC kezeli, de a Microsoft ezt a módszert kínálja:

A vezérlőt saját konténerrel használhatod az AddControllersAsServices() metódus hívásával, amelynek fő forráskódja a következő:



A ConfigureServices metódus az alapértelmezett Startup objektumban a következőképpen van konfigurálva:

Módosítjuk a következőképpen módosítjuk:

Vagy:

A ServiceBasedControllerActivator forráskódja a következő:

Miután beállítottad, töltsd be a vezérlőt közvetlenül a DI konténerből, a vezérlő az Autofacból parzírozza a szolgáltatást, és a konfigurált tulajdonság injekció lép életbe. Ahogy az alábbiakban látható:



Végül a mag forráskód címe asp.net csatolva:

A hiperlink bejelentkezés látható.

(Vége)





Előző:A Hangfire normál esetben hozzáad adatokat, de a kivétel miatt folyamatosan fut
Következő:Hogyan lehet Sqlite adatokat megjeleníteni fejlett táblázatokban E4A-val?
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com