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
相关产品推荐
相关产品推荐

