现在网站或者API应用程序中已经没有Startup.cs了
我们曾经可以将注入到那个Startup
类中
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration
}
...
}
现在这些添加服务和配置代码已经移动到 Program.cs 中,那么从那里访问配置的正确方法是什么?
现在网站或者API应用程序中已经没有Startup.cs了
我们曾经可以将注入到那个Startup
类中
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration
}
...
}
现在这些添加服务和配置代码已经移动到 Program.cs 中,那么从那里访问配置的正确方法是什么?
'IServiceCollection' does not contain a definition for 'AddInfrastructureServices'
的问题,同样的问题也出现在 AddPersistenceServices
上(你代码的最后两行)。 - Matthieu CharbonnierAddInfrastructureServices
和 AddPersistenceServices
IServiceCollection 扩展方法中对 config
的处理。 - Jerome 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...
}
}
ConfigureServices
方法中将IConfiguration
实例作为单例对象添加到服务集合中:public void ConfigureServices(IServiceCollection service)
{
services.AddSingleton<IConfiguration>(Configuration);
//...
}
这允许您在任何控制器或类中注入IConfiguration
:
public class UserController
{
public UserController(IConfiguration configuration)
//Use IConfiguration instance here
}
UseStartup
看起来在 ASP.NET Core 6 中仍然存在,尽管我还没有更新到 VS2022,因此无法测试。 - ProgrammingLlama