|
|
Postat pe 2020-9-12 20:57:21
|
|
|
|

Autofac este grozav. NET IoC. Gestionează dependențele dintre clase, astfel încât aplicația să poată fi totuși ușor modificată pe măsură ce scala și complexitatea cresc. Este implementat prin tratarea claselor .NET obișnuite ca componente. Sunt și un clișeu în privința containerelor Autofac și am scris multe articole:
Creează un proiect nou ASP.NET Core 3.1 și referinează pachetele legate de autofac prin nuget, după cum urmează:
Să creăm o nouă interfață și implementare ITest, codul este următorul:
Creează un nou controler de clasă de bază BaseControler, iar ceilalți controleri moștenesc clasa abstractă, adaugă proprietatea ITest la clasa de bază, iar codul este următorul:
Lăsăm WeatherForecastController să moștenească din clasa abstractă BaseControler, adăugând următoarea metodă de testare:
Metoda ConfigureContainer din clasa Startup înregistrează interfața și setează intrarea atributului controlerului, codul fiind următorul:
Încearcă să vizitezi:Autentificarea cu hyperlink este vizibilă.
Excepția NullReferenceException este citată în mesajul gol, așa cum se arată în figura următoare:
NullReferenceException: Object reference not set to an instance of an object.
TrecereaConstructorul este injectat în interfața ITest, metoda sa este apelată, testul trece și poate fi apelat normal。
Cauzele anomaliilor
Implementarea Controller-ului este mai specială, Controller-ul nu rezolvă și activează implicit prin propriul său container, este gestionat chiar de MVC, dar Microsoft oferă această metodă:
Poți face ca Controlerul să folosească propriul container apelând metoda AddControllersAsServices(), al cărei cod sursă principal este următorul:
Metoda ConfigureServices din obiectul implicit Startup este configurată astfel:
Îl modificăm pentru:
Sau:
Codul sursă ServiceBasedControllerActivator este următorul:
Odată configurat, încarcă controlerul direct din containerul DI, controlerul va analiza serviciul din Autofac, iar injecția de proprietăți configurată va intra în vigoare. Așa cum se arată mai jos:
În final, adresa codului sursă a nucleului asp.net este atașată:
Autentificarea cu hyperlink este vizibilă.
(Sfârșit)
|
Precedent:Hangfire adaugă date în mod normal, dar continuă să ruleze din cauza excepțieiUrmător:Cum să afișezi datele Sqlite în tabele avansate cu E4A?
|