首页 >后端开发 >C++ >为什么我的 .NET Core MVC 应用程序在使用依赖注入时抛出'无法解析服务”?

为什么我的 .NET Core MVC 应用程序在使用依赖注入时抛出'无法解析服务”?

Barbara Streisand
Barbara Streisand原创
2025-01-23 17:51:08172浏览

Why Does My .NET Core MVC App Throw

.NET Core MVC 应用抛出依赖注入错误:激活期间无法解析服务类型

在 .NET Core MVC 应用中实现依赖注入和仓储模式时,可能会遇到以下错误:

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

此错误表明应用程序无法创建 BlogController 实例,因为它无法解析 BloggerRepository 的依赖项。

问题分析

涉及以下组件:

  • 仓储: IBloggerRepository 接口及其实现 BloggerRepository。
  • 控制器: 使用 BloggerRepository 的 BlogController。
  • Startup.cs: 注册依赖注入服务的配置。

在 Startup.cs 文件中,您已注册 IBloggerRepository 的依赖项:

<code class="language-csharp">services.AddScoped<IBloggerRepository, BloggerRepository>();</code>

这意味着每当应用程序需要 IBloggerRepository 时,它都会创建一个 BloggerRepository 实例并将其注入。

但是,BlogController 在其构造函数中直接请求具体的 BloggerRepository 类:

<code class="language-csharp">public BlogController(BloggerRepository repository)</code>

这会导致依赖注入容器失败,因为它不知道如何在请求其接口时创建具体类的实例。

解决方案

要解决此问题,请将 BlogController 的构造函数更改为接受 IBloggerRepository 接口:

<code class="language-csharp">public BlogController(IBloggerRepository repository)</code>

通过接受接口,依赖注入容器现在可以成功解析依赖项并创建 BlogController 实例。

其他说明

在某些情况下,可能需要为某些类型使用自定义注册方法。例如,要注册 IHttpContextAccessor 服务,可以使用:

<code class="language-csharp">services.AddHttpContextAccessor();</code>

始终查阅外部 NuGet 包的文档以确定是否需要自定义注册。

以上是为什么我的 .NET Core MVC 应用程序在使用依赖注入时抛出'无法解析服务”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn