簡體   English   中英

“無法創建類型為 'System.String' 的實例,因為它缺少公共無參數構造函數。”

[英]"Cannot create instance of type 'System.String' because it is missing a public parameterless constructor."

我正在嘗試實現選項模式並收到以下錯誤:

“無法創建類型為 'System.String' 的實例,因為它缺少公共無參數構造函數。”

我的設置是這樣的:

我有一個像這樣的控制器類:

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 文件 - 我的 appsettings 是這樣的:

{
"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 文件的語法,它似乎是正確的,所以我有點迷茫。

跟進聊天討論:

問題是控制器在測試項目中被輔助類實例化。 此幫助程序類需要具有給定名稱 ( appsettings.test.json ) 的 appsettings 文件。 但是測試項目不包含具有預期名稱的 appsettings 文件。 所以添加一個具有正確名稱的 appsettings 文件解決了這個問題。

其他人收到此錯誤的方法:
如果appsettings.json文件出現問題,很可能會發生此錯誤。 要么是格式問題,要么是文件根本不存在。 因此,請檢查正確的文件名和格式(即使 json 驗證器成功驗證了它)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM