首页 > 其他分享 >.net5 动态配置

.net5 动态配置

时间:2024-05-11 13:19:40浏览次数:20  
标签:lockObj return builder 配置 new net5 动态 public

通过自定义ConfigurationProvider可以实现从数据库获取参数,
同时读取配置仍然可以使用原本的IConfiguration

添加ConfigProvider 处理加载配置及定期刷新配置逻辑

 /// <summary>
 /// 配置提供者
 /// </summary>
 public class ConfigProvider : ConfigurationProvider, IDisposable
 {
     private bool isDisposed = false;
     public ConfigProvider()
     {
         //定时刷新配置
         ThreadPool.QueueUserWorkItem(obj =>
         {
             while (!isDisposed)
             {
                 Load();
                 Thread.Sleep(3 * 1000);
             }
         });
     }
     /// <summary>
     /// 读写锁
     /// </summary>
     private ReaderWriterLockSlim lockObj = new ReaderWriterLockSlim();
     public override IEnumerable<string> GetChildKeys(IEnumerable<string> earlierKeys, string parentPath)
     {
         lockObj.EnterReadLock();
         try
         {
             return base.GetChildKeys(earlierKeys, parentPath);
         }
         finally
         {
             lockObj.ExitReadLock();
         }
     }
     public override bool TryGet(string key, out string value)
     {
         lockObj.EnterReadLock();
         try
         {
             return base.TryGet(key, out value);
         }
         finally
         {
             lockObj.ExitReadLock();
         }
     }

     /// <summary>
     /// 更新数据
     /// </summary>
     public override void Load()
     {
         try
         {
             lockObj.EnterWriteLock();

             //加载配置,可以使用数据库
             var config = new
             {
                 AliOSSConfig = "127",
                 Port="1515"
             };


             Data["ReRoutesConfig"] = JsonConvert.SerializeObject(config);
         }
         finally
         {
             lockObj.ExitWriteLock();
         }
         OnReload();
     }


     public void Dispose()
     {
         isDisposed = true;
     }
 }

添加配置源继承IConfigurationSource,后续注入时需要使用此类型

/// <summary>
/// 配置源
/// </summary>
public class ConfigSource : IConfigurationSource
{
    public IConfigurationProvider Build(IConfigurationBuilder builder)
    {
        return new ConfigProvider();
    }
}

添加扩展方法

 public static class ConfigEx
 {
     /// <summary>
     /// 自定义扩展,增加配置 
     /// </summary>
     public static IConfigurationBuilder AddCustomConfig(this IConfigurationBuilder builder, IConfiguration configuration = null)
     {
         if (builder == null)
         {
             throw new ArgumentNullException(nameof(builder));
         }

         return builder.Add(new ConfigSource());
     }
 }

startup中加载动态配置

 Host.CreateDefaultBuilder(args)
     .ConfigureAppConfiguration(conf =>
     {
         conf.AddCustomConfig();
     })

测试使用

//configuration通过依赖注入获取   IConfiguration configuration;
var Endpoint = configuration.GetValue<string>("ReRoutesConfig");

标签:lockObj,return,builder,配置,new,net5,动态,public
From: https://www.cnblogs.com/ives/p/18186309

相关文章

  • [动态规划] 背包 dp
    背包dpAcWing278.数字组合\(n\)个数就是$n$个物品,每个物品的价值就是它本身的数值,只能用一次,要求价值和为\(m\)的方案数。直接01背包即可。intn,m;inta[N],f[M];signedmain(){cin>>n>>m;for(rinti=1;i<=n;i++)cin>>a[i];mem......
  • 配置管理与IT资产管理:差异与协同共生
    在信息技术日新月异的今天,高效、可靠的IT服务管理成为企业竞争力的关键一环。ITIL4 作为业界公认的IT服务管理框架,为我们提供了一套全面而系统的实践指南。在这一框架下,配置管理和IT资产管理作为两大核心实践,虽各有侧重,却又相辅相成,共同构建起IT服务的坚实基石。本文将深入探讨这......
  • installshield 安装jdk并配置环境变量
    今天来通过installshield安装jdk以及配置环境变量,本质上是调用第三方安装程序。首先将jdk的安装文件添加到我们的安装程序中然后编写我们的脚本选择BEHAVIORANDLOGIC->InstallScript->Setup.Rul->AfterMoveData->OnFirstUIAfter,如图OnFirstUIAfter脚本如下点击查看代......
  • 在Linux中,什么是无盘工作站?并且如何在Linux中配置它。
    1.什么是无盘工作站?无盘工作站(DisklessWorkstation)是一种不包含硬盘驱动器的计算机。它通过网络启动并运行操作系统,通常从一个服务器上的共享存储系统下载所需的操作系统镜像。无盘工作站广泛应用于需要统一管理、安全性要求高、成本效益好的环境,如学校、图书馆、呼叫中心和一......
  • 面向单片机的超轻量级的神经网络推理库+单片机上实现动态加载功能的函数库
    1、TinyMaix-面向单片机的超轻量级的神经网络推理库TinyMaix是专为低资源的单片机设计的AI神经网络推理框架,通常被称为TinyML。TinyMaix可以让你在任意单片机上运行轻量级深度学习模型。TinyMaix的设计原则:易用性>移植性>速度>空间。TinyMaix其实是矽速科技(Sipee......
  • [动态规划] 线性 dp
    线性dpSP15637GNYR04H按照编号从小到大摆放所有人每个人都只能放在已经存在的某个人的后面(除第一行外)任何一行的人数都不能比后一行多状态表示:\(f[a][b][c][d][e]\)表示第一行\(a\)个人,第二行\(b\)个人,...,第五行\(e\)个人的合法方案数然后在每个状态下......
  • DAP Link在Keil MDK5中使用时如何配置下载器选项
    如下图,我所使用的是这种DAPLink下载器 配置步骤如下:1、OptionsforTarget'Project'->Debug页面下,选择“CMSIS-DAPDebugger”下载器,并肩如Settings页面 2、Settings页面下,选择DAP下载器,使用SW下载方式,复位方式一定选择“SYSRESETREQ”,否则会提示如法复位目标芯片......
  • 一三云服务器配置教程:要开放哪些端口?如何设置宝塔端口更安全?
    布署宝塔面板云服务器需要开放哪些端口?1、以一三云服务器为例,如需完整使用宝塔的所有功能,需要放行如下防火墙规则:20/21————–(FTP主动模式端口)39000-40000——(FTP被动模式-Linux 系统)3000-4000———(FTP被动模式– Windows系统)22——————(SSH远程登录)80—————(网站)4......
  • 死磕nginx系列-nginx日志配置
    nginxaccess日志配置access_log日志配置access_log用来定义日志级别,日志位置。语法如下:日志级别: debug>info>notice>warn>error>crit>alert>emerg语法格式: access_logpath[format[buffer=size][gzip[=level]][flush=time][if=condition]];......
  • JAVA下载安装配置基础
    JAVA下载安装配置基础JDK、JRE、JVMJDK:JavaDevelopmentKitJava开发者工具,他包含JRE和JVMJRE:JavaRuntimeEnvironmentJava运行时环境包含JVMJVM:JAVAVirtualMachineJave虚拟机下载配置JDK搜索下载JDK8(目前使用率较高的版本)安装JDK记住安装的路径进入高......