在启动时从配置文件中读取对象

目录

介绍

背景

使用代码


如何从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;
});

被配置的IdentityOptionsoptions.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值