可以找到为什么可以使用 Transient Services 而不能使用 Scoped Services
// 在programe.cs中
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddTransient<IConfigurateServices, ConfigurateServices>();
var app = builder.Build();
var test2 = app.Services.GetService<IConfigurateServices>();
使用这种方法,它工作得很好(也是单例),但是当我想更改它的范围服务时 我收到错误“无法从根解析范围服务‘ConfigurationProject.Services.IConfigurateServices’”。
builder.Services.AddScoped<IConfigurateServices, ConfigurateServices>();
我也检查了一些问题并得到了解决方案,但我不知道确切的原因? 应用程序启动时是否创建瞬态服务?
在调用 Scoped 服务之前,您需要创建范围。
public static void DoSomething()
{
using var scope = app.Services.CreateScope();
var configService = scope.ServiceProvider.GetRequiredService<IConfigurateServices>();
}