web/api 应用程序中不再有 Startup.cs。
我们曾经能够注入IConfiguration
到那个Startup
类中。
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration
}
...
}
现在那些添加服务和配置代码已移至Program.cs,从那里访问配置的正确方法是什么?
web/api 应用程序中不再有 Startup.cs。
我们曾经能够注入IConfiguration
到那个Startup
类中。
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration
}
...
}
现在那些添加服务和配置代码已移至Program.cs,从那里访问配置的正确方法是什么?
据我所知,他们将其替换为 ConfigurationManager 类的具体实例,该类是 WebApplicationBuilder 的属性。
在您的 Program.cs 类中有一行代码:
var builder = WebApplication.CreateBuilder(args);
然后,您可以从此构建器实例访问配置:
builder.Configuration.GetConnectionString("DefaultConnection");
我知道这并不能回答您的“如何注入 IConfiguration”问题,但我猜您只是希望能够访问您的配置设置。没有什么可以阻止您像以前在旧的 .net 5 代码中那样设置项目。您只需要 Program.cs 即可:
public class Program
{
public static async Task Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
await host.RunAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Trace);
});
});
}
然后只需使用以下代码创建一个名为 Startup.cs 的类:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
private IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
// TODO: Service configuration code here...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// TODO: App configuration code here...
}
}
IConfiguration
可以在WebApplicationBuilder
.
所以不需要再注入IConfiguration
了,它现在是 Program.cs 中的builder
一个属性。
var builder = WebApplication.CreateBuilder(args);
var config = builder.Configuration;
builder.Services.AddInfrastructureServices(config);
builder.Services.AddPersistenceServices(config);
您可以将IConfiguration
实例作为单例对象添加到服务集合中ConfigureServices
:
public void ConfigureServices(IServiceCollection service)
{
services.AddSingleton<IConfiguration>(Configuration);
//...
}
这允许您注入IConfiguration
任何控制器或类:
public class UserController
{
public UserController(IConfiguration configuration)
//Use IConfiguration instance here
}