以前,创建 ASP.NET Core 项目模板会创建两个 C# 文件Program.cs
和Startup.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
类?