奇怪的 IConfifiment 传递到启动模块



我有一个 ASP.NET Core应用程序,可以在Program.cs文件中构建自定义配置("Main"方法(。这就是它的构建方式:

var configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        // custom config file
        .AddJsonFile("custom.json", optional: false, reloadOnChange: false)
                .Build();
    BuildWebHost(args, configuration).Run();

发生的情况是,在BuildWebHost调用配置正确之前,由两部分组成 - appsettings.json和custom.json。

当我在启动构造函数上捕获执行时,custom.json 配置消失了:它不存在。配置中还有一堆其他分支传递给 Startup ctor,但没有 custom.json 分支。

我可能做错了什么?

更新:

public static IWebHost BuildWebHost(string[] args, IConfiguration config)
{
    var ret = WebHost.CreateDefaultBuilder(args)
        .UseConfiguration(config)
        .UseStartup<Startup>()
        .Build();
    return ret;
}

更新 2(启动构造函数(:

public Startup(IConfiguration configuration)
{
    this.Configuration = configuration;
}

我还没有弄清楚为什么UseConfigurationProgram不起作用,也没有记录何时/如何使用它。但是,您可以将UseConfiguration替换为ConfigureAppConfiguration以追加到 CreateDefaultBuilder 添加的默认提供程序列表中。

例如:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration(builder => builder
                .AddJsonFile("foo.json"))
            .UseStartup<Startup>();

最新更新