来自appsettings.json的ASP.NET Core强类型选项

gro*_*kky 2 c# asp.net asp.net-core-mvc .net-core asp.net-core

ASP.NET Core的"选项"服务有很多变化.我正在使用最新版本,并且没有任何教程和示例工作了.

为了简单起见,我使用Visual Studio的模板创建了一个新的ASP.NET Core Web应用程序.

我的appsettings.json包含:

"MyConfig": {
  "Foo": "Bar"
}
Run Code Online (Sandbox Code Playgroud)

我的强类型配置对象:

public class MyConfig {
  public string Foo;
}
Run Code Online (Sandbox Code Playgroud)

我的Startup.ConfigureServices包含:

services.AddOptions();
services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
//services.Configure<MyConfig>(opts => Configuration.GetSection("MyConfig").Bind(opts));  // I also tried this
Run Code Online (Sandbox Code Playgroud)

我的HomeController包含:

public class HomeController : Controller {

  private readonly MyConfig _myConfig;

  public HomeController(IOptions<MyConfig> myConfig) {
    _myConfig = myConfig.Value;
  }

  public IActionResult Index() {
    return Content(_myConfig.Foo);     // Foo is null
  }

}
Run Code Online (Sandbox Code Playgroud)

我的project.json包含:

"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
//"Microsoft.Extensions.Configuration.Binder": "1.0.0",   // I also tried this
Run Code Online (Sandbox Code Playgroud)

MyConfig.Foo对象总是如此null.

Joe*_*tte 5

我做的很相似,对我有用.我建议尝试添加一个get; set; 在你的Foo领域,使它成为一个属性,即

public string Foo { get; set; } 
Run Code Online (Sandbox Code Playgroud)

因为这是我在你的代码中看到的一个区别