Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 20665|Atsakyti: 0

[.NET branduolys] ASP.NET Core įveda NullReferenceException su atributu Autofac

[Kopijuoti nuorodą]
Publikuota: 2020-9-12 20:57:21 | | | |
Autofac yra nuostabus. NET IoC konteineriai. Jis valdo priklausomybes tarp klasių, kad programą vis tiek būtų galima lengvai modifikuoti didėjant masteliui ir sudėtingumui. Jis įgyvendinamas įprastas .NET klases traktuojant kaip komponentus.
Aš taip pat esu klišė apie Autofac konteinerius ir esu parašęs daug straipsnių:

Naudokite autofac MVC automatinei registracijai įgyvendinti
https://www.itsvse.com/thread-8993-1-1.html

Išspręsta "Autofac" klaida "Aptikta žiedinė komponento priklausomybė"
https://www.itsvse.com/thread-8970-1-1.html

"ASP.NET Core" naudoja "Autofac" IOC injekcijai įgyvendinti
https://www.itsvse.com/thread-7563-1-1.html

Autofac komponento egzemplioriaus aprėptis
https://www.itsvse.com/thread-5080-1-1.html

mvc valdiklio Autofac atributas įpurškiamas į valdiklį
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core priklausomybės injekcija naudoja kartu su juo pateiktą IOC konteinerį
https://www.itsvse.com/thread-7562-1-1.html

"ASP.NET Core" naudoja "Autofac" IOC injekcijai įgyvendinti
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core naudoja Autofac AOP perėmimui įgyvendinti
https://www.itsvse.com/thread-7566-1-1.html


Sukurkite naują projektą ASP.NET Core 3.1 ir nurodykite su autofac susijusius paketus naudodami nuget, kaip nurodyta toliau:


Sukurkime naują ITest sąsają ir įgyvendinimą, kodas yra toks:




Sukurkite naują BaseController bazinės klasės valdiklį, o kiti valdikliai paveldės abstrakčią klasę, pridėkite ITest ypatybę prie bazinės klasės, o kodas yra toks:

Leiskite WeatherForecastController paveldėti iš BaseController abstrakčios klasės, pridedant šį bandymo metodą:

"ConfigureContainer" metodas paleisties klasėje registruoja sąsają ir nustato valdiklio atributo įvestį, kodas yra toks:

Pabandykite aplankyti:Hipersaito prisijungimas matomas.

NullReferenceException išimtis cituojama tuščiame pranešime, kaip parodyta šiame paveikslėlyje:



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


PraeitiKonstruktorius įšvirkščiamas į ITest sąsają, iškviečiamas jo metodas, testas praeina ir jį galima iškviesti įprastai

Anomalijų priežastys

Valdiklio įgyvendinimas yra ypatingesnis, valdiklis pagal numatytuosius nustatymus neišsprendžia ir neaktyvuoja per savo konteinerį, jį valdo pats MVC, tačiau "Microsoft" pateikia šį metodą:

Galite priversti valdiklį naudoti savo konteinerį, iškviesdami AddControllersAsServices() metodą, kurio pagrindinis šaltinio kodas yra toks:



Numatytojo paleisties objekto ConfigureServices metodas sukonfigūruotas taip:

Mes jį modifikuojame į:

Arba:

ServiceBasedControllerActivator šaltinio kodas yra toks:

Sukonfigūravę įkelkite valdiklį tiesiai iš DI konteinerio, valdiklis išanalizuos paslaugą iš "Autofac" ir įsigalios mūsų sukonfigūruota ypatybės injekcija. Kaip parodyta žemiau:



Galiausiai pridedamas asp.net branduolio šaltinio kodo adresas:

Hipersaito prisijungimas matomas.

(Pabaiga)





Ankstesnis:"Hangfire" prideda duomenis įprastai, bet toliau vykdomas dėl išimties
Kitą:Kaip rodyti Sqlite duomenis išplėstinėse lentelėse naudojant E4A?
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com