c# asp.net-core asp.net-core-1.0

c# - Sección de configuración básica de ASP.NET en el inicio



asp.net-core asp.net-core-1.0 (3)

Estoy migrando un proyecto ASP.NET 5 RC1 a ASP.NET Core, y he encontrado un problema interesante que aún no he visto, o no he encontrado una solución.

Para usar las configuraciones en el Startup, he recuperado la configuración de la siguiente manera

// 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");

Después de actualizar a ASP.NET Core 1.0, parece que Configuration.Get <T> () ya no está disponible.

He intentado actualizar el código para usar Configuration.GetValue <T> (), sin embargo, parece que esto no funciona con los objetos y solo funcionará al proporcionar una ruta a un valor. Esto me ha dejado una solución para la mayoría de mis clases de configuración, como

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") };

Sin embargo, este es un problema cuando la clase de configuración contiene una matriz de objetos. En mi caso, una matriz de objetos de Cliente

public class ClientConfiguration { public Client[] Clients { get; set; } }

Con la siguiente configuración

"configuredClients": { "clients": [ { "clientName": "Client1", "clientId": "Client1" }, { "clientName": "Client2", "clientId": "Client2" } ] }

Donde esto se uniría previamente a la propiedad Clientes de mi clase de configuración no hay problema, ya no puedo encontrar una manera de hacerlo en ASP.NET Core 1.0


En general, no lee la configuración manualmente en ASP.NET Core, sino que crea un objeto que coincida con su definición. Puede leer más sobre eso en la documentación oficial aquí .

P.ej

public class MyOptions { public string Option1 { get; set; } public int Option2 { get; set; } } public void ConfigureServices(IServiceCollection services) { // Setup options with DI services.AddOptions(); services.Configure<MyOptions>(Configuration); }

Luego, solo IOptions<MyOptions> las opciones IOptions<MyOptions> donde las necesite.


Si quiere obtener primero "clientName" (esperado "Client1"), solo escriba:

Configuration.GetSection("configuredClients")["clients:0:clientName"];

Actualización para comentario

Instale .NET Core 1.0.1 y siga las instrucciones de @ TomMakin.


Respuesta actualizada
Para ASP Core 1.1.0, la vinculación del modelo genérico ahora se realiza con Get :

var config = Configuration.GetSection("configuredClients").Get<ClientConfiguration>();

Respuesta original
Qué tal esto:

var config = Configuration.GetSection("configuredClients").Bind<ClientConfiguration>();