Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 20665|Odpověď: 0

[.NET Core] ASP.NET Core vkládá do NullReferenceException atribut Autofac

[Kopírovat odkaz]
Zveřejněno 12. 9. 2020 20:57:21 | | | |
Autofac je skvělý. NET IoC kontejnery. Spravuje závislosti mezi třídami, takže aplikace může být stále snadno upravována s rostoucím rozsahem a složitostí. Implementuje se tak, že běžné .NET třídy jsou považovány za komponenty.
Jsem také klišé ohledně kontejnerů Autofac a napsal jsem spoustu článků:

Použijte autofac v MVC k implementaci automatické registrace
https://www.itsvse.com/thread-8993-1-1.html

Autofac "Zjištěna závislost na kruhové komponentě" byla vyřešena
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core používá Autofac k implementaci injekce IOC
https://www.itsvse.com/thread-7563-1-1.html

Rozsah instance komponenty autofac
https://www.itsvse.com/thread-5080-1-1.html

Atribut mvc Controller Autofac vložený do řadiče
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core dependency injection využívá IOC kontejner, který je součástí této složky
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core používá Autofac k implementaci injekce IOC
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core používá Autofac k implementaci AOP interception
https://www.itsvse.com/thread-7566-1-1.html


Vytvořte nový projekt ASP.NET Core 3.1 a odkazujte na balíčky související s AutoFACem prostřednictvím Nugetu, a to následovně:


Vytvoříme nové ITest rozhraní a implementaci, kód je následující:




Vytvořte nový řadič základní třídy BaseController, ostatní řadiče zdědí abstraktní třídu, přidají vlastnost ITest k základní třídě a kód je následující:

Nechť WeatherForecastController zdědí abstraktní třídu BaseController, přičemž přidá následující testovací metodu:

Metoda ConfigureContainer ve třídě Startup registruje rozhraní a nastavuje vstup atributu kontroleru, kód je následující:

Zkuste navštívit:Přihlášení k hypertextovému odkazu je viditelné.

NullReferenceException je uvedena v prázdné zprávě, jak je znázorněno na následujícím obrázku:



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


PrůsmykKonstruktor je vstrčen do rozhraní ITest, jeho metoda je zavolána, test projde a lze jej volat normálně

Příčiny anomálií

Implementace Controlleru je speciálnější, Controller neprovádí Resolve&Activate ve výchozím nastavení přes vlastní kontejner, je spravován samotným MVC, ale Microsoft poskytuje tuto metodu:

Můžete nastavit, aby Controller používal vlastní kontejner voláním metody AddControllersAsServices(), jejíž hlavní zdrojový kód je následující:



Metoda ConfigureServices ve výchozím objektu Startup je nakonfigurována následovně:

Upravujeme ho na:

Nebo:

Zdrojový kód ServiceBasedControllerActivator je následující:

Po nastavení načte řadič přímo z DI kontejneru, kontroler provede analýzu služby z Autofac a nakonfigurovaná injekce vlastností začne fungovat. Jak je uvedeno níže:



Nakonec je připojena adresa zdrojového kódu asp.net jádra:

Přihlášení k hypertextovému odkazu je viditelné.

(Konec)





Předchozí:Hangfire přidává data normálně, ale kvůli té výjimce se stále spouští
Další:Jak zobrazit data Sqlite v pokročilých tabulkách pomocí E4A?
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com