ASP.NET 来自 appsettings.json 的核心强类型选项
ASP.NET Core strongly-typed options from appsettings.json
ASP.NET Core 的 "options" 服务发生了很多变化。我使用的是最新版本,并且 none 的教程和示例可以使用了。
为简单起见,我使用 Visual Studio 的模板创建了一个新的 ASP.NET 核心网络应用程序。
我的 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
。
我做的非常相似,它对我有用。我建议尝试添加一个 get;set;在您的 Foo 字段上使其成为属性,即
public string Foo { get; set; }
因为这是我在您的代码中看到的一个区别
ASP.NET Core 的 "options" 服务发生了很多变化。我使用的是最新版本,并且 none 的教程和示例可以使用了。
为简单起见,我使用 Visual Studio 的模板创建了一个新的 ASP.NET 核心网络应用程序。
我的 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
。
我做的非常相似,它对我有用。我建议尝试添加一个 get;set;在您的 Foo 字段上使其成为属性,即
public string Foo { get; set; }
因为这是我在您的代码中看到的一个区别