c# - .Net Core - IConfigurationRoot 读取整个 json 文件

标签 c# dependency-injection configuration .net-core

我有以下 Config.json 文件

{
   "UserId": 2930,
   "Phones":["<HomePhoneNumber>", "<MobileNumber>"]
}

我在Config.cs中有对应的Config类

public class Config
{
  public int UserId { get; set; }
  public List<string> Phones { get; set;}
}

我正在学习本教程 - https://keestalkstech.com/2018/04/dependency-injection-with-ioptions-in-console-apps-in-net-core-2/

但是我的 config.json 文件中没有像他的 appsettings.json 这样的部分。我想阅读整个配置文件。我如何使用 ConfigurationBuilder 做到这一点?

class Program
{
    static async Task Main(string[] args)
    {
        var services = new ServiceCollection();
        ConfigureServices(services);
        var serviceProvider = services.BuildServiceProvider();

        var config = serviceProvider.GetService<Config>();
    }

    private static void ConfigureServices(IServiceCollection services)
    {
        services.AddLogging(builder => builder.AddDebug().AddConsole());

        var configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("Config.json", false)
            .Build();

        services.AddOptions();
        services.Configure<Config>(configuration);
    }
}

最佳答案

由于选项配置,您需要通过 IOptions 访问它

//...

var serviceProvider = services.BuildServiceProvider();
var option = serviceProvider.GetService<IOptions<Config>>();
var config = option.Value;

另一种方法是通过绑定(bind)到所需的对象图,然后将其添加到服务集合中,直接从配置中提取类

//...

var configuration = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("Config.json", false)
    .Build();

var config = configuration.Get<Config>();
services.AddSingleton(config);

//...

通过上述方法

//...

var config = serviceProvider.GetService<Config>();

将按预期工作。

关于c# - .Net Core - IConfigurationRoot 读取整个 json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54915299/

相关文章:

c# - 具有父类(super class)的泛型类

c# - 文件信息到 WIN32_FIND_DATAW

c# - 没有动态关键字的智能感知?

swift - Swift 中的简单容器绑定(bind)?

asp.net-core - ASP .NET Entity Framework Core 无法访问已释放的对象

c# - 将 appsetting.json 部分绑定(bind)到具有非公共(public)属性或具有不匹配名称的属性的模型

c# - 如何在 UserControl 中绑定(bind)多个属性

c# - 使用 SimpleInjector 动态选择具有名称的具体对象

Angular - 在 Azure 上托管时,在运行时从服务器变量读取配置

java - 基于条件的 Spring 轮廓