Не удается прочитать данные из config.json в консольном приложении .NET Core 2

Без рекурсии и с системой оценки:

from random import randint as ri

score_mapping = {
    0 : None,
    1 : [(1, 4),],
    2 : [(1, 6),],
    3 : [(1, 8),],
    4 : [(1,10),],
    5 : [(1, 6), (1, 6)],
    6 : [(1, 8), (1, 8)],
    7 : [(1, 10), (1, 10)],
    8 : [(1, 8), (1, 8), (1, 8)],
    9 : [(1, 10), (1, 10), (1, 10)],
    10 : [(1, 8), (1, 10), (1, 10), (1, 10)],
}

def action_roll_script(score, roll_again_at=20):
    return_value = 0

    while True:

        value = ri(1, 20)

        print(f'score={score} rolled value={value}')

        if score == 0:
            return_value += value
        else:
            return_value += sum(ri(vf, vt) for (vf, vt) in score_mapping[score])

        if value != roll_again_at:
            break

    return return_value

print(action_roll_script(0))

Возможный выход:

score=10 rolled value=20
score=10 rolled value=5
38
1
задан Konrad Viltersten 18 January 2019 в 22:36
поделиться

2 ответа

Я чувствую, что вы просто упускаете название объекта.

Попробуйте добавить имя для объекта в config.json следующим образом:

{"beep":{"beep":"bopp"}}

Тогда вы можете сделать string beep =config.GetSection("beep").Value

0
ответ дан DJ Burb 18 January 2019 в 22:36
поделиться

Убедитесь, что файл json настроен на копирование в каталог, как описано в этого блога . В противном случае при сборке или отладке файл конфигурации не будет включен. Убедитесь, что вы изменили его в свойствах.

Причина, по которой вы не можете получить доступ к вашей конфигурации, заключается в том, что IConfigurationRoot не ссылается на зависимость для ConfigurationBuilder. Чтобы убедиться, что ваш контент конфигурации будет загружен, нужно будет сделать что-то вроде этого:

public static class ConfigurationProvider
{
     public static IConfiguration BuildConfiguration => new ConfigurationBuilder()
          .SetBasePath(Directory.GetCurrentDirectory())
          .AddJsonFile("appsettings.json", true, true)
          .Build();
}

Выше будет построена наша конфигурация, теперь мы должны использовать конфигурацию.

public static class ServiceProvider
{
     public static IServiceProvider BuildServiceProvider(IServiceCollection services) => services
          .BuildDependencies()
          .BuildServiceProvider();
}

Как только мы определили нашего провайдера, мы можем сделать следующее, чтобы мы могли передать наш IConfiguration вокруг приложения для доступа к объектам.

var serviceCollection = new ServiceCollection()
     .AddSingleton(configuration => ConfigurationProvider.BuildConfiguration());

var serviceProvider = ServiceProvider.BuildServiceProvider(serviceCollection);

Тогда внутри другого класса у вас будет следующее:

public class SampleContext : ISampleRepository
{
     private readonly string dbConection;

     public SampleContext(IConfiguration configuration) => configuration.GetConnectionString("dbConnection");

     ...
 }

Тогда наш appsettings.json будет выглядеть так:

{
  "ConnectionStrings": {
    "dbConnection": "..."
  }
}

Выше приведено правильный формат для объекта JSON. Если у вас есть вложенный объект вдоль этих линий:

{
     "Sample" : {
          "Api" : {
               "SampleGet" : "..."
          }
     }
}

Тогда ваш C # будет:

configuration.GetSection("Sample:Api")["SampleGet"];

Вышеуказанное основано на предположении, что ваша конфигурация и использование не совпадают последовательная область, т. е. непосредственно в вашей главной. Также вы должны использовать appsettings.json, так как это по умолчанию, меньше дополнительной проводки, если я правильно помню. Ваш JSON также должен быть правильно отформатирован.

Но это определенно сработает, если вам понадобится дополнительная помощь, дайте мне знать, и я могу выслать вам несколько примеров приложений ядра консоли, чтобы продемонстрировать их использование.

0
ответ дан Konrad Viltersten 18 January 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: