首页 > 其他分享 >如何自定义配置

如何自定义配置

时间:2024-02-23 09:59:45浏览次数:23  
标签:自定义 配置 public 如何 new localconfig using Configuration options

  1. IConfigurationSource   build()方法
  2. IConfigurationProvider
 1 using CSRedis;
 2 using Microsoft.Extensions.Configuration;
 3 using Microsoft.Extensions.Primitives;
 4 using System;
 5 using System.Collections.Generic;
 6 using System.Text;
 7 
 8 namespace WorkerService
 9 {
10     public class RedisConfigurationSource : IConfigurationSource
11     {
12         private readonly RedisConfigurationOptions _options;
13 
14         public RedisConfigurationSource(RedisConfigurationOptions options)
15         {
16             _options = options;
17         }
18 
19         public IConfigurationProvider Build(IConfigurationBuilder builder)
20         {
21             return new RedisConfigurationProvider(_options);
22         }
23     }
24     public class RedisConfigurationOptions
25     {
26         public bool AutoReload { get; set; }
27         public string ConnectionString { get; set; }
28         public string HashCacheKey { get; set; }
29         public string HashCacheChannel { get; set; }
30     }
31 
32 
33     public class RedisConfigurationProvider : ConfigurationProvider
34     {
35         private CSRedisClient _redisClient;
36         private readonly RedisConfigurationOptions _options;
37 
38         public RedisConfigurationProvider(RedisConfigurationOptions options)
39         {
40             _options = options;
41             _redisClient = new CSRedisClient(_options.ConnectionString);
42             if (options.AutoReload)
43             {
44                 //利用Redis的发布-订阅重新加载配置
45                 _redisClient.Subscribe((_options.HashCacheChannel, msg => Load()));
46             }
47         }
48 
49         public override void Load()
50         {
51             Data = _redisClient.HGetAll<string>(_options.HashCacheKey) ?? new Dictionary<string, string>();
52         }
53     }
54 }

 

using AgileConfig.Client;
using HXH.DAL;
using HXH.DAL.DataAccess.DbProvider;
using HXH.Tools;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace WorkerService
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            //.ConfigureAppConfiguration((context, config) =>
            //{
            //    //读取本地配置
            //    var localconfig = new ConfigurationBuilder()
            //                     .SetBasePath(Directory.GetCurrentDirectory())
            //                     .AddJsonFile("appsettings.json").Build();
            //    //从本地配置里读取AgileConfig的相关信息
            //    var appId = localconfig["AgileConfig:appId"];
            //    var secret = localconfig["AgileConfig:secret"];
            //    var nodes = localconfig["AgileConfig:nodes"];
            //    //new一个client实例
            //    var configClient = new ConfigClient(appId, secret, nodes,"");
            //    //使用AddAgileConfig配置一个新的IConfigurationSource
            //    config.AddAgileConfig(configClient);
            //    //找一个变量挂载client实例,以便其他地方可以直接使用实例访问配置
            //    //注册配置项修改事件
            //    configClient.ReLoaded += ConfigClient_ConfigChanged; ;
            //})
            .ConfigureAppConfiguration(config =>
            {
                //读取本地配置
                var localconfig = new ConfigurationBuilder()
                                 .SetBasePath(Directory.GetCurrentDirectory())
                                 .AddJsonFile("appsettings.json").Build();
                config.AddRedisConfiguration(new RedisConfigurationOptions 
                {
                    AutoReload=Convert.ToBoolean(localconfig.GetSection("ConfigCenter:AutoReload").Value),
                    ConnectionString = localconfig.GetSection("ConfigCenter:ConnectionString").Value,
                    HashCacheKey = localconfig.GetSection("ConfigCenter:HashCacheKey").Value,
                    HashCacheChannel = localconfig.GetSection("ConfigCenter:HashCacheChannel").Value,
                });
            })
                .ConfigureServices((hostContext, services) =>
                {
                    //AppInfoOptions sample = new AppInfoOptions();
                    //sample.AppName = hostContext.Configuration["App:AppName"];
                    //sample.AppVersion = hostContext.Configuration["App:AppVersion"];
                    //services.AddSingleton<IOptions<AppInfoOptions>>(sample);
                    //services.Configure<AppInfoOptions>(hostContext.Configuration.GetSection(""));
                    ConfigHelper.Configuration = hostContext.Configuration;
                    //对MYSQL数据库连接进行初始化,注意所传的参数
                    //new AppsettingsUtility().Initial(hostContext.Configuration["HXH_DataBase:Sandbox:connectionString"], hostContext.Configuration["HXH_DataBase:Sandbox:providerName"]);

                    //DbHelper.DbType = (DatabaseType)Enum.Parse(typeof(DatabaseType), "MySql", true);

                    ////Redis服务依赖
                    ////RedisHelper.redisClient.InitConnect(hostContext.Configuration);

                    ////DI依赖注入
                    //services.AddTransientAssembly("HXH.Tools");
                    //services.AddScopedAssembly("HXH.Repository");
                    //services.AddScopedAssembly("HXH.Service");
                    //services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

                    services.AddHostedService<TimedHostedService>();
                });

        private static void ConfigClient_ConfigChanged(ConfigReloadedArgs obj)
        {
            Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(obj));
        }
    }


    public class AppInfoOptions 
    {
        public string AppName { get; set; }
        public string AppVersion { get; set; }
    }

}

 

标签:自定义,配置,public,如何,new,localconfig,using,Configuration,options
From: https://www.cnblogs.com/xiaozhilong/p/17918692.html

相关文章

  • 在k8S中,多个Pod如何实现使用同一个配置文件?
    在Kubernetes(k8S)中,多个Pod如需使用同一个配置文件,可以采用以下几种方法:ConfigMap创建一个ConfigMap,将共享的配置文件内容作为键值对存储。然后,在每个需要使用该配置文件的Pod的定义中,通过卷(Volume)和卷挂载(VolumeMounts)将ConfigMap挂载到容器内部的一个特定路径。......
  • 玩转SpringBoot:动态排除Starter配置,轻松部署
    引言在软件开发中,进行本地单元测试是一项常规且必要的任务。然而,在进行单元测试时,有时需要启动一些中间件服务,如Kafka、Elasticjob等。举例来说,我曾经遇到过一个问题:项目中使用了Redisson锁,但由于Redisson版本较低,在Mac环境下偶尔会报错#RedisConnectionException:Unabletoin......
  • 在K8S中,如何下载harbor的私有项目镜像?
    在Kubernetes(K8s)中,要从私有的Harbor仓库拉取镜像并部署到集群,需要完成以下步骤:配置Harbor凭证:在Kubernetes中,可以通过创建一个Secret对象来存储Harbor仓库的认证信息。例如,可以创建一个Docker-registry类型的Secret,包含用户名和密码或token。apiVersion:v1ki......
  • shell脚本如何抛出异常
    shell如何抛出异常在Shell中,可以使用exit命令来退出脚本并返回指定的状态码。当需要抛出异常时,我们可以通过设置不同的状态码来表示不同类型的错误或异常情况。下面是一些常见的Shell异常处理方式及其对应的状态码:exit0:正常结束程序,没有发生任何异常。exit1:非正常结束程序,......
  • 在k8S中,一个Pod如何实现数据持久化?数据共享?跨节点Pod如何实现数据共享?
    在Kubernetes(k8S)中,同一个Pod内实现数据持久化和数据共享的方式主要通过使用Volume(卷)来完成。Volume是Kubernetes提供的一种抽象,它代表了宿主机上的一个目录或存储设备,可以被Pod中的一个或多个容器挂载并访问。1.数据持久化:EmptyDir:在Pod创建时自动创建一个空......
  • 使用nmcli命令配置网卡(NetworkManager)
    配置网络IP地址sudonmcliconnectionmodifyens3ipv6.methoddisabledsudonmcliconnectionmodifyens3ipv4.methodmanualipv4.address192.168.1.6/24ipv4.gateway192.168.1.1ipv4.dns192.168.1.1sudonmcliconnectiondownens3&&sudonmcliconnectio......
  • Unity如何从0实现技能CD遮罩
    需求描述我们需要实现一个类似英雄联盟中的技能CD遮罩,施放技能后,技能遮罩占满技能图标,随着时间推移,技能遮罩顺时针减少遮挡面积,CD结束时,遮罩应完全消失。需求分析由于每个时刻,都会有一条线从中心点射向上面那条边的中点,我们自然可以想到将遮罩面片分为8个三角形。并且我们只......
  • 如何将矢量瓦片叠加到三维地球上?
       通过以下方法可以将矢量瓦片叠加到三维地球上。 方法/步骤下载三维地图浏览器http://www.geosaas.com/download/map3dbrowser.exe,安装完成后桌面上出现”三维地图浏览器“图标。 2、双击桌面图标打开”三维地图浏览器“ 3、点击“矢量瓦片”菜单,选择要......
  • 如何将GIS矢量数据叠加到三维地球上?
       通过以下方法可以将矢量数据叠加到三维地球上。 方法/步骤下载三维地图浏览器http://www.geosaas.com/download/map3dbrowser.exe,安装完成后桌面上出现”三维地图浏览器“图标。 2、双击桌面图标打开”三维地图浏览器“ 3、点击“矢量数据”菜单,选择要......
  • M1 MacOS 配置C++环境时遇到的插件问题
    配置环境参照博客:https://www.cnblogs.com/BYGAO/p/15135609.html遇到问题:在Terminal--ConfigureDefaultBuildTasks--C/C++clang++这一步没有C/C++clang++选项。解决方法:shift+command+p打开搜索框,搜索SettingsSync:ShowSettings在IgnoredExtensions中打......