Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 20665|Risposta: 0

[.NET Core] ASP.NET Core inietta NullReferenceException con l'attributo Autofac

[Copiato link]
Pubblicato il 2020-9-12 20:57:21 | | | |
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:

Usa autofac in MVC per implementare la registrazione automatica
https://www.itsvse.com/thread-8993-1-1.html

Autofac "Rilevata dipendenza di componente circolare" errore risolto
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core utilizza Autofac per implementare l'iniezione IOC
https://www.itsvse.com/thread-7563-1-1.html

L'ambito dell'istanza del componente autofac
https://www.itsvse.com/thread-5080-1-1.html

Attributo autofac del controller mvc iniettato nel controller
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core dependency injection utilizza il container IOC che lo accompagna
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core utilizza Autofac per implementare l'iniezione IOC
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core utilizza Autofac per implementare l'intercettazione AOP
https://www.itsvse.com/thread-7566-1-1.html


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)





Precedente:Hangfire aggiunge dati normalmente, ma continua a funzionare a causa dell'eccezione
Prossimo:Come visualizzare i dati Sqlite in tabelle avanzate con E4A?
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com