Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 20665|Répondre: 0

[.NET Core] ASP.NET Core injecte NullReferenceException avec l’attribut Autofac

[Copié le lien]
Publié le 2020-9-12 à 20:57:21 | | | |
Autofac est génial. NET IoC. Il gère les dépendances entre les classes, afin que l’application puisse toujours être facilement modifiée à mesure que l’échelle et la complexité augmentent. Il est implémenté en traitant les classes .NET classiques comme des composants.
Je suis aussi un cliché à propos des conteneurs Autofac, et j’ai écrit beaucoup d’articles :

Utiliser l’autofac dans MVC pour mettre en place l’enregistrement automatique
https://www.itsvse.com/thread-8993-1-1.html

Autofac « Erreur de dépendance circulaire détectée » résolue
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core utilise Autofac pour implémenter l’injection IOC
https://www.itsvse.com/thread-7563-1-1.html

La portée de l’instance du composant autofac
https://www.itsvse.com/thread-5080-1-1.html

Attribut Autofac du contrôleur mvc injecté dans le contrôleur
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET’injection de dépendance centrale utilise le conteneur IOC qui l’accompagne
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core utilise Autofac pour implémenter l’injection IOC
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core utilise Autofac pour implémenter l’interception AOP
https://www.itsvse.com/thread-7566-1-1.html


Créer un nouveau projet ASP.NET Core 3.1 et référer les packages liés à l’autofac via Nuget, comme suit :


Créons une nouvelle interface et une nouvelle implémentation ITest, le code est le suivant :




Créez un nouveau contrôleur de classe de base BaseControllor, et les autres contrôleurs héritent de la classe abstraite, ajoutez la propriété ITest à la classe de base, et le code est le suivant :

Laissons le WeatherForecastController hériter de la classe abstraite BaseController, en ajoutant la méthode de test suivante :

La méthode ConfigureContainer dans la classe Startup enregistre l’interface et définit l’entrée de l’attribut contrôleur, le code est le suivant :

Essayez de visiter :La connexion hyperlientérée est visible.

L’exception NullReferenceException est citée dans le message vide, comme montré dans la figure suivante :



NullReferenceException: Object reference not set to an instance of an object.


PassLe constructeur est injecté dans l’interface ITest, sa méthode est appelée, le test est réussi, et il peut être appelé normalement

Causes des anomalies

L’implémentation du contrôleur est plus spéciale, le contrôleur ne résout pas et active par défaut via son propre conteneur, il est géré par MVC lui-même, mais Microsoft propose cette méthode :

Vous pouvez faire utiliser par le contrôleur son propre conteneur en appelant la méthode AddControllersAsServices(), dont le code source principal est le suivant :



La méthode ConfigureServices dans l’objet de démarrage par défaut est configurée comme suit :

Nous le modifions ainsi :

Ou:

Le code source ServiceBasedControllerActivator est le suivant :

Une fois configuré, chargez le contrôleur directement depuis le conteneur DI, le contrôleur analysera le service depuis Autofac, et l’injection de propriétés que nous avons configurée prendra effet. Comme montré ci-dessous :



Enfin, l’adresse du code source de asp.net cœur est attachée :

La connexion hyperlientérée est visible.

(Fin)





Précédent:Hangfire ajoute des données normalement, mais continue d’exécuter à cause de l’exception
Prochain:Comment afficher les données Sqlite dans des tables avancées avec E4A ?
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com