You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#依赖注入错误:激活ServerInfoRepository时无法解析ServerContext服务

错误根本原因

依赖注入容器抛出这个异常的核心逻辑非常明确:你仅向容器注册了IServerInfoRepository与它的实现类ServerInfoRepository,但没有注册ServerInfoRepository构造函数强依赖的ServerContext类型。
.NET内置依赖注入容器在构建服务实例时,会校验构造函数传入的所有参数类型是否已经在容器中完成注册,找不到对应类型的注册条目时,就会直接抛出你看到的无法解析ServerContext的异常。
ServerContext类本身的代码确实没有语法问题,它存在无参构造函数,但DI容器不会自动扫描项目内的类型完成隐式注册,所有需要被注入的类型都必须手动显式添加到服务注册集合中。

修复方案

在Program.cs的服务配置代码段,补充ServerContext的注册即可。结合你提到的「ServerContext用于存储从配置文件加载的服务器列表」的使用场景,将它的生命周期注册为单例(Singleton)就可以满足需求,配置加载完成后全局复用同一份实例即可:

// 注册ServerContext
builder.Services.AddSingleton<ServerContext>();
// 原有仓储注册代码保留
builder.Services.AddScoped<IServerInfoRepository, ServerInfoRepository>();

如果你需要在ServerContext首次初始化时就完成配置文件的读取、填充Servers属性,可以用工厂模式注册,直接在注册逻辑里写初始化代码:

builder.Services.AddSingleton(sp =>
{
    var serverContext = new ServerContext();
    // 在此处添加从配置读取服务器列表的逻辑,示例:
    // var serverConfigSection = builder.Configuration.GetSection("AppSettings:ServerList");
    // var serverList = serverConfigSection.Get<List<Server>>();
    // serverContext.Servers = serverList.ToAsyncEnumerable();
    return serverContext;
});

注:服务注册的先后顺序没有强制要求,不会影响依赖解析,只是从代码可读性角度,一般建议先注册底层基础依赖,再注册上层依赖它的业务服务。

内容的提问来源于stack exchange,提问作者tractor boy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 17:39:22