Autofac è fantastico. NET IoC container. Gestisce le dipendenze tra le classi, in modo che l'applicazione possa comunque essere facilmente modificata man mano che la scala e la complessità aumentano. Viene implementata trattando le normali classi .NET come componenti. Sono anche un cliché riguardo ai contenitori Autofac, e ho scritto molti articoli:
Crea un nuovo progetto ASP.NET Core 3.1 e fai riferimento ai pacchetti correlati all'autofac tramite nuget, come segue:
Creiamo una nuova interfaccia e implementazione ITest, il codice è il seguente:
Crea un nuovo controller di classe base BaseController, e altri controller ereditano la classe astratta, aggiungi la proprietà ITest alla classe base, e il codice è il seguente:
Lascia che il WeatherForecastController erediti dalla classe astratta BaseControllor, aggiungendo il seguente metodo di test:
Il metodo ConfigureContainer nella classe Startup registra l'interfaccia e imposta l'input dell'attributo controller, il codice è il seguente:
Prova a visitare:Il login del link ipertestuale è visibile.
L'eccezione NullReferenceException è citata nel messaggio vuoto, come mostrato nella figura seguente:
NullReferenceException: Object reference not set to an instance of an object.
PassoIl costruttore viene iniettato nell'interfaccia ITest, il suo metodo viene chiamato, il test superato e può essere chiamato normalmente。
Cause delle anomalie
L'implementazione del Controller è più particolare, il Controller non risolve e attiva di default tramite un proprio container, è gestito dallo stesso MVC, ma Microsoft fornisce questo metodo:
Puoi far usare al Controller il proprio container chiamando il metodo AddControllersAsServices(), il cui codice sorgente principale è il seguente:
Il metodo ConfigureServices nell'oggetto Startup predefinito è configurato come segue:
Lo modifichiamo per:
O:
Il codice sorgente ServiceBasedControllerActivator è il seguente:
Una volta configurato, carica il controller direttamente dal container DI, il controller analizzerà il servizio da Autofac e l'iniezione di proprietà che abbiamo configurato avrà effetto. Come mostrato di seguito:
Infine, l'indirizzo del codice sorgente del asp.net core è allegato:
Il login del link ipertestuale è visibile.
(Fine)
|