c# - 奇怪的 IConfiguration 传递给启动模块
问题描述
我有一个 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。
当我在 Startup 构造函数中捕获执行时,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;
}
解决方案
我还没有弄清楚为什么UseConfiguration
inProgram
不起作用,也没有记录何时/如何使用它。但是,您可以替换UseConfiguration
为ConfigureAppConfiguration
附加到由添加的默认提供程序列表中CreateDefaultBuilder
。
例如:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder => builder
.AddJsonFile("foo.json"))
.UseStartup<Startup>();
推荐阅读
- javascript - 尝试将媒体播放器代码从 JavaScript 转换为 ReactJS 时出错:意外的令牌
- android - 使用 Firebase UI 在我的应用中保存凭据
- c - 缺少函数原型时,C程序不会出错
- php - PreparedStatement fetch_assoc() 不返回任何内容
- reactjs - 我在获取帖子请求中找不到 404
- java - java - 如何在Java中迭代Set并向其添加元素?
- postgresql - postgresql 唯一约束允许重复
- c++ - 是否可以在具有不同返回类型的不同类中拥有类似的成员?
- java - 自动更新新插入的房间实体中的主键
- java - 未选中的 ThrowingSupplier 用于 lambda