ConfigurationBinder produce un valor no coincidente.
Anteriormente, BinderOptions.ErrorOnUnknownConfiguration se usaba únicamente para generar una excepción si existía un valor en la configuración, pero no en el modelo al que se enlazaba. Ahora, si esta propiedad se establece en true
, también se produce una excepción si el valor de la configuración no se puede convertir al tipo de valor en el modelo.
Versión introducida
.NET 8 Preview 1
Comportamiento anterior
Anteriormente, el siguiente código aceptaba silenciosamente las excepciones de los campos que contenían enumeraciones no válidas:
public enum TestSettingsEnum
{
Option1,
Option2,
}
public class MyModelContainingArray
{
public TestSettingsEnum[] Enums { get; set; }
}
public void SilentlySwallowsInvalidItems()
{
var dictionary = new Dictionary<string, string>
{
["Section:Enums:0"] = "Option1",
["Section:Enums:1"] = "Option3", // invalid - ignored
["Section:Enums:2"] = "Option4", // invalid - ignored
["Section:Enums:3"] = "Option2",
};
var configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddInMemoryCollection(dictionary);
var config = configurationBuilder.Build();
var configSection = config.GetSection("Section");
var model = configSection.Get<MyModelContainingArray>(o => o.ErrorOnUnknownConfiguration = true);
// Only Option1 and Option2 are in the bound collection at this point.
}
Comportamiento nuevo
A partir de .NET 8, si un valor de configuración no se puede convertir al tipo del valor en el modelo, se produce una excepción InvalidOperationException.
Tipo de cambio importante
Este es un cambio de comportamiento.
Motivo del cambio
El comportamiento anterior era confuso para algunos desarrolladores. Establecían BinderOptions.ErrorOnUnknownConfiguration en true
y esperaban que se produjera una excepción si se encontraba cualquier problema al vincular la configuración.
Acción recomendada
Si la aplicación tiene valores de configuración que no se pueden convertir en las propiedades del modelo enlazado, cambie o quite los valores.
Alternativamente, establezca BinderOptions.ErrorOnUnknownConfiguration en false
.
API afectadas
- Microsoft.Extensions.Configuration.ConfigurationBinder.Bind(IConfiguration, Object, Action<BinderOptions>)
- Microsoft.Extensions.Configuration.ConfigurationBinder.Get<T>(IConfiguration, Action<BinderOptions>)
- Microsoft.Extensions.Configuration.ConfigurationBinder.Get(IConfiguration, Type, Action<BinderOptions>)