首页 > 后端开发 > C++ > 为什么我的 ASP.NET Core 控制器由于依赖项注入错误而无法激活?

为什么我的 ASP.NET Core 控制器由于依赖项注入错误而无法激活?

Barbara Streisand
发布: 2025-01-23 17:57:15
原创
960 人浏览过

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

排查依赖注入错误:解决控制器激活时的服务解析问题

依赖注入 (DI) 是现代软件开发中不可或缺的一部分。然而,在 DI 过程中可能会出现错误,尤其是在无法成功解析服务以进行控制器激活时。

错误消息

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

此错误表明,在控制器激活期间,DI 容器无法创建 BloggerRepository 的实例以注入到 BlogController 构造函数中。

问题分析

为了理解根本原因,让我们检查提供的代码片段:

仓储接口和实现

<code>public interface IBloggerRepository { ... }

public class BloggerRepository : IBloggerRepository { ... }</code>
登录后复制

控制器

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

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

    public IActionResult Index() { ... }
}</code>
登录后复制

启动配置

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

    services.AddScoped<IBloggerRepository, BloggerRepository>();
}</code>
登录后复制

解决方案

问题在于 BlogController 构造函数请求的是具体的类 BloggerRepository。但是,DI 容器已注册了接口 IBloggerRepository 的实例。为了解决这个问题,应该将控制器更新为接受接口而不是具体的类:

<code>public BlogController(IBloggerRepository repository)
//                 ^
//  修复:构造函数接受接口
{
    _repository = repository;
}</code>
登录后复制

进行此更改后,DI 容器可以成功解析服务并将 BloggerRepository 的实例注入到 BlogController 中。

其他注意事项

在极少数情况下,某些对象可能需要特定的注册技术。例如,如果遇到以下错误:

<code>Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' ...</code>
登录后复制

可以使用外部库提供的自定义扩展方法来解决此类依赖关系。始终查阅外部库的文档以获取具体的注册说明。

以上是为什么我的 ASP.NET Core 控制器由于依赖项注入错误而无法激活?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板