.Net Core - IConfigurationRoot прочитал весь файл json - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть следующий Config.jsonfile

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

И у меня есть соответствующий класс Config в Config.cs

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/

Но у меня нет разделов, подобных его appsettings.json, в моем файле config.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);
    }
}

1 Ответ

0 голосов
/ 28 февраля 2019

Из-за конфигурации параметров вам нужно будет получить к ней доступ через IOptions

//...

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

. Другой подход заключается в извлечении класса непосредственно из конфигурации путем привязки к нужному графу объектов и последующего добавления его ксервисный набор

//...

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>();

будет работать как положено.

...