|
|
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:
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ýnimkeBudúci:Ako zobraziť Sqlite dáta v pokročilých tabuľkách pomocou E4A?
|