如何访问 IWebHostBuilder 扩展中的配置

Ste*_*ler 10 c# asp.net-core

正如主题所说,我不知道如何访问在 CreateWebHostBuilder 中设置的 Configuration 对象。

Code

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .CustomExtension();
Run Code Online (Sandbox Code Playgroud)

在代码示例中,我想在 CustomExtension 方法中访问 Configuration

Tao*_*hou 5

对于IWebHostBuilder,它用于配置WebHost管道。

对于一般方式,如果要访问Configuration,则需要将Configuration对象传递给CustomExtensionlike :

var config = new ConfigurationBuilder()
.AddEnvironmentVariables()
.Build();

var host = new WebHostBuilder()
.UseConfiguration(config)
.UseKestrel()
.UseStartup<Startup>();
Run Code Online (Sandbox Code Playgroud)

另一种方式,您可以尝试UseConfiguration访问Configuration对象,但代码仅在CreateWebHostBuilder(args).Build().Run()被调用时才会运行。

    public static class WebHostBuilderExtension
{
    public static IWebHostBuilder CustomExtension(this IWebHostBuilder webHostBuilder)
    {
        return webHostBuilder.ConfigureServices(services => {
            var config = services.BuildServiceProvider().GetRequiredService<IConfiguration>();
            var connection = config.GetConnectionString("Default");
        });
    }
    public static void CustomAction(IServiceCollection services)
    {
        var config = services.BuildServiceProvider().GetRequiredService<IConfiguration>();
        var connection = config.GetConnectionString("Default");
    }
}
Run Code Online (Sandbox Code Playgroud)

用途:

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .CustomExtension()
            .ConfigureServices(services => WebHostBuilderExtension.CustomAction(services));
Run Code Online (Sandbox Code Playgroud)