gpt4 book ai didi

c# - 如何将自定义 JSON 文件添加到 IConfiguration 中?

转载 作者:太空狗 更新时间:2023-10-29 22:29:44 28 4
gpt4 key购买 nike

我正在使用 asp.net + Autofac。

我正在尝试加载一个自定义 JSON 配置文件,并基于该文件创建/实例化一个 IConfiguration 实例,或者至少将我的文件包含到默认情况下 asp.net 构建的任何 IConfiguration 中。

我的问题是 asp.net 似乎覆盖了 IConfiguration 的依赖项注册。

我似乎无法注册自己的 IConfiguration 对象 - DI 容器将始终将其解析为某个似乎由 asp.net 库本身生成的实例。

而且我不确定如何让 asp.net 至少加载我的自定义配置文件 - 即是否有任何方法可以获取它使用的 ConfigurationBuilder,并在它之前添加我自己的文件构建 IConfiguration 对象。

我试过以下方法:

public class Startup
{
public IConfigurationRoot Configuration { get; }

public Startup(IHostingEnvironment env)
{
this.Configuration = new ConfigurationBuilder()
.SetBasePath(path)
.AddJsonFile("somefile.json")
.Build();
}

public IServiceProvider ConfigureServices(IServiceCollection services)
{
// Add framework services.
services
.AddMvc()
.AddControllersAsServices();

var builder = new ContainerBuilder();
builder.Register(x => this.Configuration).As<IConfiguration>();
builder.Populate(services);

var container = builder.Build();

// This will return another IConfiguration instance then the one I registered;
// namely One that contains 1 provider, a MemoryConfigurationProvider
var xxx = container.Resolve<IConfiguration>();

return new AutofacServiceProvider(container);
}
}

如何让 asp.net 也加载我的自定义 JSON 配置文件?

最佳答案

对于.Net Core 2.2,需要修改Program.cs:

之前

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

之后

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)

//This is how you attach additional JSON files
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile("customSettings.json", optional: false, reloadOnChange: false);
})
//End of update
.UseStartup<Startup>();

有关最新修正和添加其他类型的自定义设置,请参阅以下位置的 Microsoft 文档 article .

关于c# - 如何将自定义 JSON 文件添加到 IConfiguration 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49046847/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com