Было внесено множество изменений в «параметры» ASP.NET Core. Я использую последнюю версию, и ни один из учебников и образцов больше не работает.ASP.NET Core сильно типизировал параметры из appsettings.json
Чтобы упростить это, я создал новое веб-приложение ASP.NET Core с использованием шаблонов 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
.
Я делаю очень похожи, и это работает для меня. Я предлагаю попробовать добавить get; set; на ваше свойство Foo, т. е. общедоступную строку Foo {get; set;}, поскольку это одно отличие, которое я вижу в вашем коде –
не использовать rc2, поскольку другой человек прокомментировал, он работает в 1.0.0 –
Ох да, это не определено как собственность, как Джо сказал – mybirthname