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

本文关键字:appsettings json 选项 NET Core 强类型 ASP | 更新日期: 2023-09-27 18:15:52

ASP已经发生了很多变化。. NET Core的"options"服务。我用的是最新版本,没有教程和样本工作了。

为了保持简单,我创建了一个新的ASP。. NET Core web应用,使用Visual Studio的模板。

我的appsettings.json包含:

"MyConfig": {
  "Foo": "Bar"
}

我的强类型配置对象:

public class MyConfig {
  public string Foo;
}

我的Startup.ConfigureServices包含:

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

我的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
  }
}

和我的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

但是MyConfig.Foo对象总是null

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

我也在做类似的事情,它对我很有效。我建议尝试添加get;set;将Foo字段设置为属性,例如

public string Foo { get; set; } 

因为这是我在你的代码中看到的一个不同