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>
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>
Contrôleur
<code>public class BlogController : Controller { private readonly IBloggerRepository _repository; public BlogController(BloggerRepository repository) // ^ // 问题在此:构造函数请求具体的类 { _repository = repository; } public IActionResult Index() { ... } }</code>
Configuration de démarrage
<code>public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddScoped<IBloggerRepository, BloggerRepository>(); }</code>
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>
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>
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!