如何在asp.net core 6中注入IConfiguration

Bla*_*ise 19 c# asp.net-core-6.0

web/api 应用程序中不再有 Startup.cs。

我们曾经能够注入IConfiguration到该类中Startup。

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在这些添加服务和配置代码已移至Program.cs中,从那里访问配置的正确方法是什么?

Bla*_*ise 19

可以IConfiguration在 中访问WebApplicationBuilder。

在此输入图像描述

因此无需再注入,它现在是Program.cs中IConfiguration的一个属性。 builder在此输入图像描述

var builder = WebApplication.CreateBuilder(args);
var config = builder.Configuration;

builder.Services.AddInfrastructureServices(config);
builder.Services.AddPersistenceServices(config);
Run Code Online (Sandbox Code Playgroud)

  • 我有“IServiceCollection”不包含“AddInfrastructureServices”的定义,“AddPersistenceServices”也是如此(代码的最后两行) (3认同)

Mar*_*rko 6

据我所知,他们用 ConfigurationManager 类的具体实例替换了它,该实例是 WebApplicationBuilder 的属性。

在您的 Program.cs 类中有一行代码:

 var builder = WebApplication.CreateBuilder(args);
Run Code Online (Sandbox Code Playgroud)

然后,您可以从此构建器实例访问配置:

 builder.Configuration.GetConnectionString("DefaultConnection");
Run Code Online (Sandbox Code Playgroud)

我知道这并不能回答您的“如何注入 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);
                });
            });
}
Run Code Online (Sandbox Code Playgroud)

然后使用以下代码创建一个名为 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...
    }
}
Run Code Online (Sandbox Code Playgroud)