目录
如何从Web应用程序的配置文件反序列化对象
介绍
本技巧揭示了一种非常简单的方法,可以将Web应用程序的配置文件的各个部分作为对象读取,而无需选择模式或依赖注入。
背景
在ASP.NET Core中,很容易在配置文件中配置一组相关设置,通常是appsettings.json,要反序列化为类并注入DI客户端。然而,显然,简单地从该文件反序列化对象并在DI容器完全初始化之前使用它并不简单。
使用代码
作为一个例子,我已经编写了我的代码,其中通过从appsettings.json读取这些规则作为对象来为ASP.NET身份配置密码规则。通常情况下,我会对这些设置进行硬编码,因为它们在应用程序的生命周期中很少发生变化,但是在我包含密码生成的项目中,我希望生成的密码符合与为身份配置的密码相同的规则,我认为在appsettings.json中存储这些密码选项会很好。
这是我在配置文件中存储密码规则的方法:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=Flair;Trusted_Connection=True;
MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
},
},
"Authentication": {
"PasswordRules": {
"RequiredLength": 8,
"RequiredUniqueChars": 2,
"RequireNonAlphanumeric": false,
"RequireLowercase": false,
"RequireUppercase": false,
"RequireDigit": true
}
},
"AllowedHosts": "*"
}
这就是我在Startup.cs中读取这些设置和配置Identity的方法:
var pwdSection = Configuration.GetSection("Authentication:PasswordRules");
var pwdOpts = pwdSection.Get<PasswordOptions>();
services.Configure<IdentityOptions>(options =>
{
options.Password = pwdOpts;
});
被配置的IdentityOptions的options.Password属性是类的简单对象PasswordOptions。我所要做的就是确保配置文件的“ Authentication:PasswordRules”部分是对象的序列化。
奇迹发生在调用时:
var pwdOpts = pwdSection.Get<PasswordOptions>()
除非我在项目中包含以下NuGet包,否则这通常是不可能的。
Microsoft.Extensions.Configuration.Binder
这个StackOverflow 答案很好地揭示了这一点。
原文地址:https://www.codeproject.com/Tips/1272142/Reading-Objects-From-the-Config-File-at-Startup