Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 20665|Odpoveď: 0

[.NET Core] ASP.NET Core vpichuje NullReferenceException s atribútom Autofac

[Kopírovať odkaz]
Zverejnené 12.9.2020 20:57:21 | | | |
Autofac je úžasný. NET IoC kontajnery. Spravuje závislosti medzi triedami tak, aby sa aplikácia dala ľahko upravovať aj pri zvyšovaní rozsahu a zložitosti. Implementuje sa tak, že bežné .NET triedy sú považované za komponenty.
Som tiež klišé ohľadom kontajnerov Autofac a napísal som veľa článkov:

Použite autofac v MVC na implementáciu automatickej registrácie
https://www.itsvse.com/thread-8993-1-1.html

Autofac "Detekcia závislosti kruhových komponentov" bola vyriešená
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core používa Autofac na implementáciu injekcie IOC
https://www.itsvse.com/thread-7563-1-1.html

Rozsah inštancie komponentu autofac
https://www.itsvse.com/thread-5080-1-1.html

atribút mvc Controller Autofac injektovaný do ovládača
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core dependency injection využíva IOC kontajner, ktorý je súčasťou
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core používa Autofac na implementáciu injekcie IOC
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core používa Autofac na implementáciu AOP interception
https://www.itsvse.com/thread-7566-1-1.html


Vytvorte nový projekt ASP.NET Core 3.1 a odkazujte na balíky súvisiace s AutoFACom cez Nuget, nasledovne:


Vytvorme nové ITest rozhranie a implementáciu, kód je nasledovný:




Vytvorte nový riadiaci triedu základnej triedy BaseController, ostatné kontroléry zdedia abstraktnú triedu, pridám vlastnosť ITest k základnej triede a kód je nasledovný:

Nech WeatherForecastController zdedí abstraktnú triedu BaseController, pričom sa pridá nasledujúca testovacia metóda:

Metóda ConfigureContainer v triede Startup registruje rozhranie a nastavuje vstup atribútu kontroléra, kód je nasledovný:

Skúste navštíviť:Prihlásenie na hypertextový odkaz je viditeľné.

NullReferenceException je citovaná v prázdnej správe, ako je znázornené na nasledujúcom obrázku:



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


PrihrávkaKonštruktér sa vstrekne do rozhrania ITest, jeho metóda sa zavolá, test prejde a môže byť volaný normálne

Príčiny anomálií

Implementácia Controlleru je špecifickejšia, Controller nerieši a neaktivuje automaticky cez vlastný kontajner, spravuje ho priamo MVC, ale Microsoft poskytuje túto metódu:

Môžete nastaviť Controller používať vlastný kontajner volaním metódy AddControllersAsServices(), ktorej hlavný zdrojový kód je nasledovný:



Metóda ConfigureServices v predvolenom objekte Startup je nakonfigurovaná nasledovne:

Upravujeme ho na:

Alebo:

Zdrojový kód ServiceBasedControllerActivator je nasledovný:

Po nastavení načítajte kontrolér priamo z DI kontajnera, kontrolér spracuje službu z Autofac a nakonfigurovaná injekcia vlastností nadobudne účinok. Ako je uvedené nižšie:



Nakoniec je pripojená adresa zdrojového kódu asp.net jadra:

Prihlásenie na hypertextový odkaz je viditeľné.

(Koniec)





Predchádzajúci:Hangfire pridáva dáta normálne, ale stále sa vykonáva kvôli výnimke
Budúci:Ako zobraziť Sqlite dáta v pokročilých tabuľkách pomocou E4A?
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com