Maison > développement back-end > C++ > Pourquoi mon application .NET Core MVC renvoie-t-elle « Impossible de résoudre le service » lors de l'utilisation de l'injection de dépendances ?

Pourquoi mon application .NET Core MVC renvoie-t-elle « Impossible de résoudre le service » lors de l'utilisation de l'injection de dépendances ?

Barbara Streisand
Libérer: 2025-01-23 17:51:08
original
135 Les gens l'ont consulté

Why Does My .NET Core MVC App Throw

L'application .NET Core MVC génère une erreur d'injection de dépendance : impossible de résoudre le type de service lors de l'activation

Lors de l'implémentation de modèles d'injection de dépendances et d'entreposage dans les applications .NET Core MVC, vous pouvez rencontrer les erreurs suivantes :

<code>InvalidOperationException: Unable to resolve service for type 'WebApplication1.Data.BloggerRepository' while attempting to activate 'WebApplication1.Controllers.BlogController'.</code>
Copier après la connexion

Cette erreur indique que l'application ne peut pas créer une instance de BlogController car elle ne peut pas résoudre les dépendances de BloggerRepository.

Analyse du problème

Les composants suivants sont impliqués :

  • Dépôt : Interface IBloggerRepository et son implémentation BloggerRepository.
  • Contrôleur : BlogController utilisant BloggerRepository.
  • Startup.cs : Enregistrez la configuration du service d'injection de dépendances.

Dans le fichier Startup.cs, vous avez enregistré la dépendance de IBloggerRepository :

<code class="language-csharp">services.AddScoped<IBloggerRepository, BloggerRepository>();</code>
Copier après la connexion

Cela signifie que chaque fois qu'une application nécessite un IBloggerRepository, elle crée une instance BloggerRepository et l'injecte.

Cependant, BlogController demande directement la classe concrète BloggerRepository dans son constructeur :

<code class="language-csharp">public BlogController(BloggerRepository repository)</code>
Copier après la connexion

Cela provoque l'échec du conteneur d'injection de dépendances car il ne sait pas comment créer une instance de la classe concrète lorsque son interface est demandée.

Solution

Pour résoudre ce problème, modifiez le constructeur du BlogController pour accepter l'interface IBloggerRepository :

<code class="language-csharp">public BlogController(IBloggerRepository repository)</code>
Copier après la connexion

En acceptant l'interface, le conteneur d'injection de dépendances peut désormais résoudre avec succès les dépendances et créer des instances BlogController.

Autres consignes

Dans certains cas, il peut être nécessaire d'utiliser des méthodes d'enregistrement personnalisées pour certains types. Par exemple, pour enregistrer le service IHttpContextAccessor, vous utiliserez :

<code class="language-csharp">services.AddHttpContextAccessor();</code>
Copier après la connexion

Consultez toujours la documentation des packages NuGet externes pour déterminer si un enregistrement personnalisé est requis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal