Получить значение конфигурации до настройки служб

Я хотел бы получить значение из моего файла конфигурации json до того, как будет настроена инъекция зависимостей / до того, как я вызову "Build()" в моей коллекции сервисов.

Если я хочу настроить службы по-разному в зависимости от значения в моем файле конфигурации json, как мне это сделать?

Другими словами, как получить значение конфигурации из реализации IConfigurationRoot?

Как в этом коде установить значение useService1 в зависимости от значения в моем файле конфигурации?

    class Program
    {
        static void Main(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();

            var serviceCollection = new ServiceCollection();

            var useService1 = true; // how do I get a value from my configuration file here?
            if (useService1)
                serviceCollection.AddSingleton<IMyService>(new Service1());
            else
                serviceCollection.AddSingleton<IMyService>(new Service1());

            var serviceProvider = serviceCollection.BuildServiceProvider();

            var myService = serviceProvider.GetService<IMyService>();

            myService.DoWork();
        }

        interface IMyService
        {
            void DoWork();
        }

        class Service1 : IMyService
        {
            public void DoWork()
            {
                Console.WriteLine("1 doing work");
            }
        }

        class Service2 : IMyService
        {
            public void DoWork()
            {
                Console.WriteLine("2 doing work");
            }
        }
    }

1 ответ

Я могу получить вложенные значения конфигурации appsettings.json, используя точку с запятой для указания вложенных значений.

appsettings.json:

{
  "TopLevel1":  "Value1",
  "TopLevel2": {
    "SecondLevel1": "Value2",
    "SecondLevel2": {
      "ThirdLevel": "Value3"
    }
  }
}
class Program
{
    static void Main(string[] args)
    {
        var configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();

        var value1 = configuration["TopLevel1"];
        var value2 = configuration["TopLevel2:SecondLevel1"];
        var value3 = configuration["TopLevel2:SecondLevel2:ThirdLevel"];

    }
}
Другие вопросы по тегам