在ASP.NET Core 2中发出配置选项的问题

时间:2018-10-08 18:49:59

标签: c# asp.net-core asp.net-core-2.1

在我的项目上配置选项时,我遇到了此错误:

  

System.InvalidOperationException:无法创建类型为“ Microsoft.Extensions.Options.IOptions`1 [[myproject.Models.ConnectionStrings,]”的实例。模型绑定的复杂类型不能为抽象或值类型,并且必须具有无参数构造函数。或者,为'optionsAccessor'参数提供一个非空的默认值。

有什么想法吗?

我将模型配置如下:

namespace myproject.Models
{
  public class ConnectionStrings
  {
    public ConnectionStrings()
    {
        AzureStorageConnectionString = "azurestorageconnectionstring_ctor";
    }
    public string AzureStorageConnectionString { get; set; }
  }
}

Startup.cs ConfigureServices(IServiceCollection服务)包含以下两行

services.AddOptions();
services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));

我的控制器包含此

private ConnectionStrings _connectionStrings;
public IActionResult Index(IOptions<ConnectionStrings> optionsAccessor)
{
  _connectionStrings = optionsAccessor.Value;
  return View();
}

我的appsettings.json和appsettings.Development.json都包含以下内容

{
 "Logging": {
 "LogLevel": {
   "Default": "Debug",
   "System": "Information",
   "Microsoft": "Information"
  }
 },
 "ConnectionStrings": {
   "AzureStorageConnectionString": "xxxxxxxxx"
 },
}

1 个答案:

答案 0 :(得分:3)

您应该将data[, 35] <- ifelse(data[, 35] %in% 1:10, data[, 35 + data[, 35]], data[, 35]) 注入到控制器的构造函数中,而不是注入到IOptions<ConnectionStrings>方法中。

通过将其定义为动作参数,您期望Index()为您构造它(显然,它不能)。

请参见Documentation