Maison > développement back-end > C++ > Pourquoi mon contrôleur ASP.NET Core ne parvient-il pas à s'activer en raison d'une erreur d'injection de dépendance ?

Pourquoi mon contrôleur ASP.NET Core ne parvient-il pas à s'activer en raison d'une erreur d'injection de dépendance ?

Barbara Streisand
Libérer: 2025-01-23 17:57:15
original
960 Les gens l'ont consulté

Why is my ASP.NET Core controller failing to activate due to a dependency injection error?

Résoudre les erreurs d'injection de dépendances : résoudre le problème de résolution de service lorsque le contrôleur est activé

L'injection de dépendances (DI) fait partie intégrante du développement logiciel moderne. Cependant, des erreurs peuvent survenir pendant le processus DI, en particulier si le service ne peut pas être résolu avec succès pour l'activation du contrôleur.

Message d'erreur

<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 le conteneur DI n'a pas pu créer une instance de BloggerRepository pour l'injection dans le constructeur BlogController lors de l'activation du contrôleur.

Analyse du problème

Pour comprendre la cause première, examinons l'extrait de code fourni :

Interface et mise en œuvre de l'entrepôt

<code>public interface IBloggerRepository { ... }

public class BloggerRepository : IBloggerRepository { ... }</code>
Copier après la connexion

Contrôleur

<code>public class BlogController : Controller
{
    private readonly IBloggerRepository _repository;

    public BlogController(BloggerRepository repository)
    //                 ^
    //  问题在此:构造函数请求具体的类
    {
        _repository = repository;
    }

    public IActionResult Index() { ... }
}</code>
Copier après la connexion

Configuration de démarrage

<code>public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddScoped<IBloggerRepository, BloggerRepository>();
}</code>
Copier après la connexion

Solution

Le problème est que le constructeur BlogController demande la classe concrète BloggerRepository. Cependant, le conteneur DI a enregistré une instance de l'interface IBloggerRepository. Pour résoudre ce problème, le contrôleur doit être mis à jour pour accepter les interfaces au lieu des classes concrètes :

<code>public BlogController(IBloggerRepository repository)
//                 ^
//  修复:构造函数接受接口
{
    _repository = repository;
}</code>
Copier après la connexion

Après avoir effectué cette modification, le conteneur DI peut résoudre avec succès le service et injecter une instance de BloggerRepository dans BlogController.

Autres notes

Dans de rares cas, certains objets peuvent nécessiter des techniques d'enregistrement spécifiques. Par exemple, si vous rencontrez l'erreur suivante :

<code>Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' ...</code>
Copier après la connexion

Ces dépendances peuvent être résolues à l'aide de méthodes d'extension personnalisées fournies par des bibliothèques externes. Consultez toujours la documentation de la bibliothèque externe pour les instructions d'inscription 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!

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