値の不一致に対して ConfigurationBinder でスローされる
以前は、ある値が構成に存在するが、バインドされているモデルには存在しない場合に例外を発生させるためにのみ、BinderOptions.ErrorOnUnknownConfiguration が使用されていました。 このプロパティが true
に設定されていて、かつ構成の値をモデルの値の型に変換できない場合にも、例外がスローされるようになりました。
導入されたバージョン
.NET 8 Preview 1
以前の動作
以前は、次のコードで、無効な列挙型を含むフィールドの例外がサイレントに飲み込まれていました。
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.
}
新しい動作
.NET 8 以降、構成値をモデルの値の型に変換できない場合に、InvalidOperationException がスローされます。
破壊的変更の種類
この変更は、動作変更です。
変更理由
以前の動作は、一部の開発者の混乱を招いていました。 BinderOptions.ErrorOnUnknownConfiguration を true
に設定し、構成がバインドされたときに "何らかの" 問題が発生した場合に、例外がスローされると想定していました。
推奨アクション
バインドされたモデルのプロパティに変換できない構成値がアプリにある場合は、その値を変更または削除します。
または、BinderOptions.ErrorOnUnknownConfiguration を false
に設定します。
影響を受ける API
- 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>)
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET