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>
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!