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 ?
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>
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 :
Dans le fichier Startup.cs, vous avez enregistré la dépendance de IBloggerRepository :
<code class="language-csharp">services.AddScoped<IBloggerRepository, BloggerRepository>();</code>
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>
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>
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>
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!