«Не удалось создать экземпляр типа« System.String », потому что в нем отсутствует конструктор publi c без параметров». - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь реализовать шаблон параметров и получаю следующую ошибку:

"Невозможно создать экземпляр типа 'System.String', поскольку в нем отсутствует конструктор publi c без параметров. "

Моя настройка такова:

У меня есть класс контроллера, подобный этому:

public class MyController : Controller
{

  private readonly HttpClient _httpClient;
  private readonly MyConfig _myConfig;

  public MyController(HttpClient httpClient, IOptions<MyConfig> myConfig){
    _httpClient = httpClient;
    _myConfig = myConfig.Value;  <<<<<<<<<<<< FAILS HERE
  }

  [HttpGet]
  public async Task<IActionResult> Get(){
  ....
  var myHttpRequest = new HttpRequestMessage(HttpMethod.Get, _myConfig.MY_ENDPOINT);
  ...
  ...
  }
}

У меня есть файл JSON - мои настройки приложения, которые выглядит примерно так:

{
"Tracer": {
"Trace": {
  "Default": "",
  "Smari": ""
  }
},

"MY_DB": "",
"MY_USER": "",
"MY_PW": "",
"MY_ENDPOINT": "https://my-test-site/offering",
"MY_CIGO": ""
}

И в моем файле Startup.cs я написал следующее:

services.Configure<MyConfig>(Configuration);

Наконец, мой класс MyConfig, который выглядит так:

public class MyConfig 
{
    public string MY_ENDPOINT { get; set; }
}

Кто-нибудь может увидеть, почему это не получается? Я проверил мой JSON файл на синтаксис, и он кажется правильным, поэтому я немного растерялся.

1 Ответ

0 голосов
/ 27 февраля 2020

В продолжение обсуждения в чате:

Проблема заключалась в том, что экземпляр контроллера был создан внутри тестового проекта вспомогательным классом. Этот вспомогательный класс ожидал файл appsettings с заданным именем (appsettings.test.json). Но тестовый проект не содержал файл appsettings с ожидаемым именем. Таким образом, добавление файла appsettings с правильным именем решило эту проблему.

Средства для всех остальных, получающих эту ошибку:
Эта ошибка, скорее всего, возникает, если что-то не так с файлом appsettings.json. Либо это проблема формата, либо файл вообще не существует. Поэтому проверьте правильность имени файла и формата (даже если json валидаторы успешно его подтвердят).

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