как получить доступ к конфигурации в расширении IWebHostBuilder - PullRequest
0 голосов
/ 04 декабря 2018

Как говорится в теме, я не могу понять, как получить доступ к объекту конфигурации, настроенному в CreateWebHostBuilder.

Code:

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

В примере кода я быхотел бы получить доступ к конфигурации в методе CustomExtension

1 Ответ

0 голосов
/ 05 декабря 2018

Для IWebHostBuilder используется для настройки конвейера WebHost.

В общем случае, если вы хотите получить доступ к Configuration, вам нужно передать объект Configuration в CustomExtension, например:

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

var host = new WebHostBuilder()
.UseConfiguration(config)
.UseKestrel()
.UseStartup<Startup>();

Для другого способа вы можете попробоватьПодобно 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");
    }
}

Использование:

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .CustomExtension()
            .ConfigureServices(services => WebHostBuilderExtension.CustomAction(services));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...