.NET 5应用如何在数据层(非控制器)读取appsettings.json的配置值
解决方案
步骤1:在Startup类中引入IConfiguration实例
ASP.NET Core默认已将加载完appsettings.json的IConfiguration实现注册到服务容器,直接在Startup构造函数中接收即可,无需自行实现IConfiguration接口:
public class Startup { // 新增私有字段存储配置实例 private readonly IConfiguration _configuration; public Startup(IConfiguration configuration) { _configuration = configuration; } // 原有ConfigureServices、Configure方法保留即可 }
步骤2:修正Scheduler实例化逻辑
实例化Scheduler时直接传入已经加载好配置的_configuration字段即可:
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddSingleton(typeof(Config)); services.AddSingleton(typeof(TokenHelper)); // 传入配置实例即可完成实例化 Scheduler obj = new Scheduler(_configuration); services.AddSingleton<Scheduler>(obj); Thread t1 = new Thread(new ThreadStart(obj.CallScheduler)); t1.Start(); }
可选优化:强类型绑定配置(更推荐)
为了避免硬编码配置Key、实现类型安全,建议把配置绑定到实体类使用:
- 定义配置对应实体类
public class AppSettings { public int DelayTimer { get; set; } public string Server { get; set; } public string DefaultDatabase { get; set; } }
- 在ConfigureServices中添加绑定
services.Configure<AppSettings>(_configuration);
- 修改Scheduler构造函数注入强类型配置
public class Scheduler { private readonly int _delayTime; public Scheduler(IOptions<AppSettings> settings) { _delayTime = settings.Value.DelayTimer; CallScheduler(); } }
内容的提问来源于stack exchange,提问作者abhishek
相关产品推荐
相关产品推荐

