Я переношу проект ASP.NET 5 RC1 в ASP.NET Core, и столкнулся с интересной проблемой, которую я еще не видел, или нашел решение для.
Чтобы использовать настройки конфигурации в Startup, я ранее извлек конфигурацию следующим образом.
// Works fine for DI both in ASP.NET 5 RC1 and ASP.NET Core
services.Configure<SomeConfigurationClass>(Configuration.GetSection("SomeConfigurationSection"));
// How I previous retrieved the configuration for use in startup.
// No longer available in ASP.NET Core
var someConfigurationToUseLater = Configuration.Get<SomeConfigurationClass>("SomeConfigurationSection");
После обновления до ASP.NET Core 1.0 кажется, что Configuration.Get <T> () больше не доступен.
Я попытался обновить код, чтобы использовать Configuration.GetValue <T> (), однако это, похоже, не работает с объектами и будет работать только при предоставлении пути к значению. Это оставило меня с обходным решением для большинства моих классов конфигурации, таких как
var someConfigurationName = "someConfiguration";
var someConfigurationClass = new SomeConfigurationClass()
{
Value1 = Configuration.GetValue<string>($"{someConfigurationName}:value1"),
Foo = Configuration.GetValue<string>($"{someConfigurationName}:foo"),
Bar = Configuration.GetValue<string>($"{someConfigurationName}:bar")
};
Однако это проблема, когда класс конфигурации содержит массив объектов. В моем случае массив объектов Client
public class ClientConfiguration
{
public Client[] Clients { get; set; }
}
Со следующей конфигурацией
"configuredClients": {
"clients": [
{
"clientName": "Client1",
"clientId": "Client1"
},
{
"clientName": "Client2",
"clientId": "Client2"
}
]
}
Если это ранее не связывалось с свойством Клиентов моего конфигурационного класса, я больше не могу найти способ сделать это в ASP.NET Core 1.0