Configuration.GetSection(ConnectionStringName).Get‹?› всегда null

В моем приложении Asp.net Core 2.0 я пытаюсь реализовать дизайн, чтобы не использовать зависимость конструктора IConfiguration для строк подключения в моем проекте библиотеки классов, как советовал @Nkosi здесь.

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

public void ConfigureServices(IServiceCollection services) {
//...

var settings = Configuration
    .GetSection("ConnectionStrings:OdeToFood")
    .Get<ConnectionSetings>();

//...verify settings (if needed)

services.AddSingleton(settings);
}

public class ConnectionSetings
{
    public string Name { get; set; }
}

Я вижу, как Configuration.GetSection("ConnectionStrings:OdeToFood") возвращает атрибуты «Ключ», «Путь» и «Значение», но не выполняет привязки и возвращает значение null в настройках.

Я видел похожие вопросы, в которых люди рекомендовали решения, подобные следующим, но ни одно из них не работает для меня.

services.Configure<ConnectionsSetings>(Configuration.GetSection("ConnectionStrings:OdeToFood"));

Также,

Configuration
    .GetSection("ConnectionStrings:OdeToFood").Bind<>

Ниже приведен файл appsettings.json.

{
"Greeting": "Hello!!!",
"ConnectionStrings": {
  "OdeToFood": "Server=(localdb)\\MSSQLLocalDB;Database=OdeToFood;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

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

введите здесь описание изображения

На следующем снимке экрана видно, что переменная настройки становится нулевой.

введите здесь описание изображения


person Learning Curve    schedule 19.07.2018    source источник
comment
Настройки берутся из файла appsettings.json? Если да, настроен ли этот файл как содержимое или как копирование в выходной каталог?   -  person Ricardo Peres    schedule 19.07.2018
comment
Да, это файл appsetting.json, настроенный как контент   -  person Learning Curve    schedule 19.07.2018
comment
Какова структура appsettings.json?   -  person Alex Riabov    schedule 19.07.2018
comment
@LearningCurve Покажите нам json-файл настроек вашего приложения   -  person johnny 5    schedule 19.07.2018
comment
Не на моем компьютере, но это очень важно с разделом ConnectionStrings, в котором есть строка подключения OdeToFood. Не забывайте, Configuration.Getsection может прочитать файл и предоставить значение. Это сопоставление с файлом ConnectionsSeting, которое не происходит   -  person Learning Curve    schedule 19.07.2018
comment
@LearningCurve Я был вдали от своей машины, когда вы спрашивали ранее. Можете ли вы показать фрагмент файла настроек с разделом, показывающим соединения. Должно помочь с определением проблемы.   -  person Nkosi    schedule 19.07.2018
comment
Я обновил свой первоначальный вопрос с помощью appsettings.json и скриншотов @Nkosi.   -  person Learning Curve    schedule 20.07.2018


Ответы (1)


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

{
  ...

  "ConnectionStrings": {
    "OdeToFood": {
      "Name": "someConncetionString"
    } 
  },

  ...
}

Затем следующий код вернет объект:

var settings = Configuration
    .GetSection("ConnectionStrings:OdeToFood")
    .Get<ConnectionSetings>();
person Alex Riabov    schedule 19.07.2018
comment
Это именно то, что я делаю прямо сейчас, @Alex, но настройки не работают. - person Learning Curve; 19.07.2018
comment
@LearningCurve, не могли бы вы поделиться своим файлом appsettings.json? - person Alex Riabov; 19.07.2018
comment
Я изменил свой вопрос с помощью appsettings.json и скриншота ошибки @Alex - person Learning Curve; 20.07.2018
comment
@LearningCurve в ваших данных json отсутствует «Имя» - person Alex Riabov; 20.07.2018
comment
Большое спасибо, Алекс. Такая глупая ошибка!. Вчера не смог попробовать предложенное вами решение, так как мой день закончился. Еще раз спасибо и любезность @NKosi, который помог мне настроить этот дизайн. - person Learning Curve; 20.07.2018