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 :
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)
|