使用 GetService() 访问注册的范围服务和瞬态服务

问题描述 投票:0回答:1

可以找到为什么可以使用 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>();

我也检查了一些问题并得到了解决方案,但我不知道确切的原因? 应用程序启动时是否创建瞬态服务?

asp.net .net-core dependency-injection .net-8.0
1个回答
0
投票

在调用 Scoped 服务之前,您需要创建范围

public static void DoSomething()
{
    using var scope = app.Services.CreateScope();
    var configService = scope.ServiceProvider.GetRequiredService<IConfigurateServices>();
}
© www.soinside.com 2019 - 2024. All rights reserved.