Maison >développement back-end >C++ >Pourquoi mon application .NET Core MVC ne parvient-elle pas à injecter un service enregistré dans un contrôleur ?

Pourquoi mon application .NET Core MVC ne parvient-elle pas à injecter un service enregistré dans un contrôleur ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-23 17:47:09242parcourir

Why Does My .NET Core MVC App Fail to Inject a Registered Service into a Controller?

Solution à l'échec de l'injection de dépendance du contrôleur dans l'application .NET Core MVC

Dans votre application .NET Core MVC, une erreur se produit lorsque vous essayez d'injecter BloggerRepository dans BlogController avec le message suivant :

<code>InvalidOperationException: Unable to resolve service for type 'WebApplication1.Data.BloggerRepository' while attempting to activate 'WebApplication1.Controllers.BlogController'.</code>

Analysons le code pour comprendre cette erreur :

Niveau entrepôt :

<code>public interface IBloggerRepository { ... }
public class BloggerRepository : IBloggerRepository { ... }</code>

Contrôleur :

<code>public class BlogController : Controller
{
    private readonly IBloggerRepository _repository;
    public BlogController(BloggerRepository repository) { ... }
}</code>

Startup.cs :

<code>services.AddScoped<IBloggerRepository, BloggerRepository>();</code>
L'erreur

indique que le système d'injection de dépendances ne peut pas fournir une instance BlogController pour le constructeur BloggerRepository.

Le problème est que le contrôleur attend une classe concrète pour BloggerRepository, tandis qu'il est demandé au conteneur d'injection de dépendances d'enregistrer l'interface IBloggerRepository avec l'implémentation concrète.

Solution :

Pour résoudre ce problème, modifiez le constructeur du contrôleur pour qu'il accepte une interface au lieu d'une classe concrète :

<code>public BlogController(IBloggerRepository repository) { ... }</code>

Avec cette modification, le conteneur d'injection de dépendances peut désormais résoudre avec succès les dépendances et fournir une instance de IBloggerRepository qui sera automatiquement instanciée en tant que BloggerRepository.

Remarque : Différents packages peuvent avoir leur propre façon d'enregistrer les services. Il est recommandé de toujours consulter sa documentation pour obtenir des conseils spécifiques.

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!

Déclaration:
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