0

以前,创建 ASP.NET Core 项目模板会创建两个 C# 文件Program.csStartup.cs. 在Startup类中,您将通过构造函数收到一个IConfiguration,然后您可以使用它来检索配置值。它看起来像这样:

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        string connectionString = Configuration.GetConnectionString("Foo");
    }
}

但现在从 .NET 6 开始,有一个新模板,其中只有一个Program.cs文件,您可以在其中向 DI 容器添加服务,并配置 HTTP 请求管道。它看起来像这样(它还利用了新的 C# 9.0顶级语句功能):

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
app.UseRouting();

app.Run();

现在,在这种新风格中,我怎样才能访问IConfiguration这里Program.cs

如果我做:

var configuration = builder.Services.BuildServiceProvider().GetService<IConfiguration>();

我收到以下警告:

ASP0000:从应用程序代码调用“BuildServiceProvider”会导致创建单例服务的额外副本。考虑替代方案,例如依赖注入服务作为“配置”的参数。

但是这里没有Configure方法,因为我没有Startup课程。

在这种情况下你应该怎么做?你如何IConfiguration在这个新模板中得到一个这里而不需要创建一个单独的Startup类?

4

0 回答 0