Autofac je odličen. NET IoC kontejnerji. Upravlja odvisnosti med razredi, tako da je aplikacijo še vedno mogoče enostavno spreminjati, ko se obseg in kompleksnost povečujeta. Implementiran je tako, da se običajni .NET razredi obravnavajo kot komponente. Sem tudi kliše glede posodic Autofac in napisal sem veliko člankov:
Ustvarite nov projekt ASP.NET Core 3.1 in preko Nugeta referencirajte pakete, povezane z Autofac, kot sledi:
Ustvarimo nov ITest vmesnik in implementacijo, koda je naslednja:
Ustvarite nov osnovni krmilnik razreda BaseController, drugi krmilniki podedujejo abstraktni razred, dodajo lastnost ITest osnovnemu razredu in koda je naslednja:
Naj WeatherForecastController podeduje abstraktni razred BaseController in doda naslednjo testno metodo:
Metoda ConfigureContainer v razredu Startup registrira vmesnik in nastavi vhodni atribut kontrolerja, koda je naslednja:
Poskusite obiskati:Prijava do hiperpovezave je vidna.
NullReferenceException je naveden v praznem sporočilu, kot je prikazano na naslednji sliki:
NullReferenceException: Object reference not set to an instance of an object.
PrehodKonstruktor se vbrizga v ITest vmesnik, njegova metoda se pokliče, test opravi in ga lahko normalno pokličemo。
Vzroki anomalij
Implementacija krmilnika je bolj posebna, krmilnik privzeto ne resolve&activate preko svojega kontejnerja, temveč ga upravlja sam MVC, vendar Microsoft ponuja to metodo:
Kontroler lahko uporabi svoj lasten vsebnik z metodo AddControllersAsServices(), katere glavna izvorna koda je naslednja:
Metoda ConfigureServices v privzetem objektu Startup je konfigurirana takole:
Spremenimo ga v:
Ali:
Izvorna koda ServiceBasedControllerActivator je naslednja:
Ko je nastavljen, naložimo krmilnik neposredno iz DI kontejnerja, krmilnik bo razčlenil storitev iz Autofac, in vbrizgavanje lastnosti, ki smo ga konfigurirali, bo začelo veljati. Kot je prikazano spodaj:
Na koncu je priložen naslov izvorne kode asp.net jedra:
Prijava do hiperpovezave je vidna.
(Konec)
|